diff --git a/HEAD/LibJWT-Icon-95x91.png b/HEAD/LibJWT-Icon-95x91.png new file mode 100644 index 00000000..1d8505df Binary files /dev/null and b/HEAD/LibJWT-Icon-95x91.png differ diff --git a/HEAD/annotated.html b/HEAD/annotated.html new file mode 100644 index 00000000..f5a8a1af --- /dev/null +++ b/HEAD/annotated.html @@ -0,0 +1,113 @@ + + + + + + + + +LibJWT: Data Structures + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + +
 Cjwk_item_tStructural representation of a JWK
 Cjwt_verify_tUsed to manage keys for verifying a JWT
+
+
+
+ + + + + diff --git a/HEAD/annotated_dup.js b/HEAD/annotated_dup.js new file mode 100644 index 00000000..1273c63a --- /dev/null +++ b/HEAD/annotated_dup.js @@ -0,0 +1,5 @@ +var annotated_dup = +[ + [ "jwk_item_t", "structjwk__item__t.html", "structjwk__item__t" ], + [ "jwt_verify_t", "structjwt__verify__t.html", "structjwt__verify__t" ] +]; \ No newline at end of file diff --git a/HEAD/bc_s.png b/HEAD/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/HEAD/bc_s.png differ diff --git a/HEAD/bc_sd.png b/HEAD/bc_sd.png new file mode 100644 index 00000000..31ca888d Binary files /dev/null and b/HEAD/bc_sd.png differ diff --git a/HEAD/classes.html b/HEAD/classes.html new file mode 100644 index 00000000..42306213 --- /dev/null +++ b/HEAD/classes.html @@ -0,0 +1,113 @@ + + + + + + + + +LibJWT: Data Structure Index + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Data Structure Index
+
+
+ + +
+
+ + + + + diff --git a/HEAD/closed.png b/HEAD/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/HEAD/closed.png differ diff --git a/HEAD/cookie.js b/HEAD/cookie.js new file mode 100644 index 00000000..53ad21d9 --- /dev/null +++ b/HEAD/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/HEAD/deprecated.html b/HEAD/deprecated.html new file mode 100644 index 00000000..eb96dfb4 --- /dev/null +++ b/HEAD/deprecated.html @@ -0,0 +1,114 @@ + + + + + + + + +LibJWT: Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Deprecated List
+
+
+
+
Global jwt_decode (jwt_t **jwt, const char *token, const unsigned char *key, int key_len)
+
See jwt_verify and jwt_verify_wcb instead.
+
Global jwt_decode_2 (jwt_t **jwt, const char *token, jwt_key_p_t key_provider)
+
See jwt_verify and jwt_verify_wcb instead.
+
+
+
+
+ + + + + diff --git a/HEAD/dir_d44c64559bbebec7f509842c48db8b23.html b/HEAD/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..e130ac24 --- /dev/null +++ b/HEAD/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,115 @@ + + + + + + + + +LibJWT: include Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
include Directory Reference
+
+
+ + + + + +

+Files

 jwt.h
 The C JSON Web Token Library +JWK + JWKS.
 
+
+
+ + + + + diff --git a/HEAD/dir_d44c64559bbebec7f509842c48db8b23.js b/HEAD/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 00000000..9d4430d7 --- /dev/null +++ b/HEAD/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "jwt.h", "jwt_8h.html", "jwt_8h" ] +]; \ No newline at end of file diff --git a/HEAD/doc.svg b/HEAD/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/HEAD/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/HEAD/docd.svg b/HEAD/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/HEAD/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/HEAD/doxygen-awesome-fragment-copy-button.js b/HEAD/doxygen-awesome-fragment-copy-button.js new file mode 100644 index 00000000..86c16fd9 --- /dev/null +++ b/HEAD/doxygen-awesome-fragment-copy-button.js @@ -0,0 +1,85 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeFragmentCopyButton extends HTMLElement { + constructor() { + super(); + this.onclick=this.copyContent + } + static title = "Copy to clipboard" + static copyIcon = `` + static successIcon = `` + static successDuration = 980 + static init() { + $(function() { + $(document).ready(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const fragmentWrapper = document.createElement("div") + fragmentWrapper.className = "doxygen-awesome-fragment-wrapper" + const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button") + fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title + + fragment.parentNode.replaceChild(fragmentWrapper, fragment) + fragmentWrapper.appendChild(fragment) + fragmentWrapper.appendChild(fragmentCopyButton) + + } + } + }) + }) + } + + + copyContent() { + const content = this.previousSibling.cloneNode(true) + // filter out line number from file listings + content.querySelectorAll(".lineno, .ttc").forEach((node) => { + node.remove() + }) + let textContent = content.textContent + // remove trailing newlines that appear in file listings + let numberOfTrailingNewlines = 0 + while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') { + numberOfTrailingNewlines++; + } + textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines) + navigator.clipboard.writeText(textContent); + this.classList.add("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon + window.setTimeout(() => { + this.classList.remove("success") + this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon + }, DoxygenAwesomeFragmentCopyButton.successDuration); + } +} + +customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton) diff --git a/HEAD/doxygen-awesome-interactive-toc.js b/HEAD/doxygen-awesome-interactive-toc.js new file mode 100644 index 00000000..f3c3e770 --- /dev/null +++ b/HEAD/doxygen-awesome-interactive-toc.js @@ -0,0 +1,91 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeInteractiveToc { + static topOffset = 38 + static hideMobileMenu = true + static headers = [] + + static init() { + window.addEventListener("load", () => { + let toc = document.querySelector(".contents > .toc") + if(toc) { + toc.classList.add("interactive") + if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) { + toc.classList.add("open") + } + document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => { + if(toc.classList.contains("open")) { + toc.classList.remove("open") + } else { + toc.classList.add("open") + } + }) + + document.querySelectorAll(".contents > .toc > ul a").forEach((node) => { + let id = node.getAttribute("href").substring(1) + DoxygenAwesomeInteractiveToc.headers.push({ + node: node, + headerNode: document.getElementById(id) + }) + + document.getElementById("doc-content")?.addEventListener("scroll",this.throttle(DoxygenAwesomeInteractiveToc.update, 100)) + }) + DoxygenAwesomeInteractiveToc.update() + } + }) + } + + static update() { + let active = DoxygenAwesomeInteractiveToc.headers[0]?.node + DoxygenAwesomeInteractiveToc.headers.forEach((header) => { + let position = header.headerNode.getBoundingClientRect().top + header.node.classList.remove("active") + header.node.classList.remove("aboveActive") + if(position < DoxygenAwesomeInteractiveToc.topOffset) { + active = header.node + active?.classList.add("aboveActive") + } + }) + active?.classList.add("active") + active?.classList.remove("aboveActive") + } + + static throttle(func, delay) { + let lastCall = 0; + return function (...args) { + const now = new Date().getTime(); + if (now - lastCall < delay) { + return; + } + lastCall = now; + return setTimeout(() => {func(...args)}, delay); + }; + } +} diff --git a/HEAD/doxygen-awesome-paragraph-link.js b/HEAD/doxygen-awesome-paragraph-link.js new file mode 100644 index 00000000..e53d132c --- /dev/null +++ b/HEAD/doxygen-awesome-paragraph-link.js @@ -0,0 +1,51 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2022 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DoxygenAwesomeParagraphLink { + // Icon from https://fonts.google.com/icons + // Licensed under the Apache 2.0 license: + // https://www.apache.org/licenses/LICENSE-2.0.html + static icon = `` + static title = "Permanent Link" + static init() { + $(function() { + $(document).ready(function() { + document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => { + let anchorlink = document.createElement("a") + anchorlink.setAttribute("href", `#${node.getAttribute("id")}`) + anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title) + anchorlink.classList.add("anchorlink") + node.classList.add("anchor") + anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon + node.parentElement.appendChild(anchorlink) + }) + }) + }) + } +} diff --git a/HEAD/doxygen-awesome.css b/HEAD/doxygen-awesome.css new file mode 100644 index 00000000..c2f41142 --- /dev/null +++ b/HEAD/doxygen-awesome.css @@ -0,0 +1,2681 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/HEAD/doxygen.css b/HEAD/doxygen.css new file mode 100644 index 00000000..3653ad2e --- /dev/null +++ b/HEAD/doxygen.css @@ -0,0 +1,1841 @@ +/* The standard CSS for doxygen 1.12.0*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: black; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/HEAD/doxygen.svg b/HEAD/doxygen.svg new file mode 100644 index 00000000..79a76354 --- /dev/null +++ b/HEAD/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HEAD/doxygen_crawl.html b/HEAD/doxygen_crawl.html new file mode 100644 index 00000000..e021760f --- /dev/null +++ b/HEAD/doxygen_crawl.html @@ -0,0 +1,253 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HEAD/dynsections.js b/HEAD/dynsections.js new file mode 100644 index 00000000..0c356052 --- /dev/null +++ b/HEAD/dynsections.js @@ -0,0 +1,205 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ +$(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/HEAD/favicon.ico b/HEAD/favicon.ico new file mode 100644 index 00000000..b8bc61f9 Binary files /dev/null and b/HEAD/favicon.ico differ diff --git a/HEAD/files.html b/HEAD/files.html new file mode 100644 index 00000000..536c7e0c --- /dev/null +++ b/HEAD/files.html @@ -0,0 +1,113 @@ + + + + + + + + +LibJWT: File List + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 12]
+ + +
  include
 jwt.hThe C JSON Web Token Library +JWK + JWKS
+
+
+
+ + + + + diff --git a/HEAD/files_dup.js b/HEAD/files_dup.js new file mode 100644 index 00000000..f1749d90 --- /dev/null +++ b/HEAD/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/HEAD/folderclosed.svg b/HEAD/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/HEAD/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/HEAD/folderclosedd.svg b/HEAD/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/HEAD/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/HEAD/folderopen.svg b/HEAD/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/HEAD/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/HEAD/folderopend.svg b/HEAD/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/HEAD/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/HEAD/functions.html b/HEAD/functions.html new file mode 100644 index 00000000..b83adaf6 --- /dev/null +++ b/HEAD/functions.html @@ -0,0 +1,122 @@ + + + + + + + + +LibJWT: Data Fields + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all struct and union fields with links to the structures/unions they belong to:
+
+
+ + + + + diff --git a/HEAD/functions_vars.html b/HEAD/functions_vars.html new file mode 100644 index 00000000..9d951e8c --- /dev/null +++ b/HEAD/functions_vars.html @@ -0,0 +1,122 @@ + + + + + + + + +LibJWT: Data Fields - Variables + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all variables with links to the structures/unions they belong to:
+
+
+ + + + + diff --git a/HEAD/globals.html b/HEAD/globals.html new file mode 100644 index 00000000..12d98ba9 --- /dev/null +++ b/HEAD/globals.html @@ -0,0 +1,241 @@ + + + + + + + + +LibJWT: Globals + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- j -

+
+
+ + + + + diff --git a/HEAD/globals_enum.html b/HEAD/globals_enum.html new file mode 100644 index 00000000..608473f8 --- /dev/null +++ b/HEAD/globals_enum.html @@ -0,0 +1,112 @@ + + + + + + + + +LibJWT: Globals + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all enums with links to the files they belong to:
+
+
+ + + + + diff --git a/HEAD/globals_eval.html b/HEAD/globals_eval.html new file mode 100644 index 00000000..0a61aee0 --- /dev/null +++ b/HEAD/globals_eval.html @@ -0,0 +1,155 @@ + + + + + + + + +LibJWT: Globals + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all enum values with links to the files they belong to:
+ +

- j -

+
+
+ + + + + diff --git a/HEAD/globals_func.html b/HEAD/globals_func.html new file mode 100644 index 00000000..0bfcc679 --- /dev/null +++ b/HEAD/globals_func.html @@ -0,0 +1,179 @@ + + + + + + + + +LibJWT: Globals + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all functions with links to the files they belong to:
+ +

- j -

+
+
+ + + + + diff --git a/HEAD/globals_type.html b/HEAD/globals_type.html new file mode 100644 index 00000000..3866f098 --- /dev/null +++ b/HEAD/globals_type.html @@ -0,0 +1,115 @@ + + + + + + + + +LibJWT: Globals + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Here is a list of all typedefs with links to the files they belong to:
+
+
+ + + + + diff --git a/HEAD/graph_legend.html b/HEAD/graph_legend.html new file mode 100644 index 00000000..4bf8ee2a --- /dev/null +++ b/HEAD/graph_legend.html @@ -0,0 +1,167 @@ + + + + + + + + +LibJWT: Graph Legend + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+
+ + + + + diff --git a/HEAD/graph_legend.md5 b/HEAD/graph_legend.md5 new file mode 100644 index 00000000..da515da9 --- /dev/null +++ b/HEAD/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/HEAD/graph_legend.png b/HEAD/graph_legend.png new file mode 100644 index 00000000..5eb6922f Binary files /dev/null and b/HEAD/graph_legend.png differ diff --git a/HEAD/group__advanced__grp.html b/HEAD/group__advanced__grp.html new file mode 100644 index 00000000..42a3f653 --- /dev/null +++ b/HEAD/group__advanced__grp.html @@ -0,0 +1,130 @@ + + + + + + + + +LibJWT: Advanced Functionality + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Advanced Functionality
+
+
+
+Collaboration diagram for Advanced Functionality:
+
+
+ + + + + +
+ + + + + + + + +

+Topics

 Memory Handlers
 These functions allow you to get or set memory allocation functions.
 
 Cryptographic Operations
 Functions used to set and get which crypto operations are used
 
+

Detailed Description

+
+
+ + + + + diff --git a/HEAD/group__advanced__grp.js b/HEAD/group__advanced__grp.js new file mode 100644 index 00000000..e370747d --- /dev/null +++ b/HEAD/group__advanced__grp.js @@ -0,0 +1,5 @@ +var group__advanced__grp = +[ + [ "Memory Handlers", "group__jwt__memory__grp.html", "group__jwt__memory__grp" ], + [ "Cryptographic Operations", "group__jwt__crypto__grp.html", "group__jwt__crypto__grp" ] +]; \ No newline at end of file diff --git a/HEAD/group__advanced__grp.map b/HEAD/group__advanced__grp.map new file mode 100644 index 00000000..321d47bd --- /dev/null +++ b/HEAD/group__advanced__grp.map @@ -0,0 +1,5 @@ + + + + + diff --git a/HEAD/group__advanced__grp.md5 b/HEAD/group__advanced__grp.md5 new file mode 100644 index 00000000..9ffcf400 --- /dev/null +++ b/HEAD/group__advanced__grp.md5 @@ -0,0 +1 @@ +24062febc47166c5efe14581be2c471c \ No newline at end of file diff --git a/HEAD/group__advanced__grp.png b/HEAD/group__advanced__grp.png new file mode 100644 index 00000000..12741218 Binary files /dev/null and b/HEAD/group__advanced__grp.png differ diff --git a/HEAD/group__jwks__core__grp.html b/HEAD/group__jwks__core__grp.html new file mode 100644 index 00000000..f3669515 --- /dev/null +++ b/HEAD/group__jwks__core__grp.html @@ -0,0 +1,577 @@ + + + + + + + + +LibJWT: JSON Web Key and Sets + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
JSON Web Key and Sets
+
+
+ +

Functions to handle JSON that represents JWK and JWKS for use in validating JWT objects. +More...

+ + + + + +

+Data Structures

struct  jwk_item_t
 Structural representation of a JWK. More...
 
+ + + + +

+Typedefs

typedef struct jwk_set jwk_set_t
 Opaque JWKS object.
 
+ + + + + + + + + + +

+Enumerations

enum  jwk_key_type_t { JWK_KEY_TYPE_NONE +, JWK_KEY_TYPE_EC +, JWK_KEY_TYPE_RSA +, JWK_KEY_TYPE_OKP + }
 JWK Key Types. More...
 
enum  jwk_pub_key_use_t { JWK_PUB_KEY_USE_NONE +, JWK_PUB_KEY_USE_SIG +, JWK_PUB_KEY_USE_ENC + }
 Usage types for JWK public keys. More...
 
enum  jwk_key_op_t {
+  JWK_KEY_OP_NONE +, JWK_KEY_OP_SIGN +, JWK_KEY_OP_VERIFY +, JWK_KEY_OP_ENCRYPT +,
+  JWK_KEY_OP_DECRYPT +, JWK_KEY_OP_WRAP +, JWK_KEY_OP_UNWRAP +, JWK_KEY_OP_DERIVE_KEY +,
+  JWK_KEY_OP_DERIVE_BITS +, JWK_KEY_OP_INVALID +
+ }
 Allowed key operations for JWK private keys. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX jwk_set_tjwks_create (const char *jwk_json_str)
 Create a new JWKS object for later use in validating JWTs.
 
JWT_EX int jwks_item_add (jwk_set_t *jwk_set, jwk_item_t *item)
 Add a jwk_item_t to an existing jwk_set_t.
 
JWT_EX int jwks_error (jwk_set_t *jwk_set)
 Check if there is an error within the jwk_set.
 
JWT_EX int jwks_error_any (jwk_set_t *jwk_set)
 Check if there is an error within the jwk_set and any of the jwk_item_t in the set.
 
JWT_EX const char * jwks_error_msg (jwk_set_t *jwk_set)
 Retrieve an error message from a jwk_set.
 
JWT_EX jwk_item_tjwks_item_get (jwk_set_t *jwk_set, size_t index)
 Return the index'th jwk_item in the jwk_set.
 
JWT_EX void jwks_free (jwk_set_t *jwk_set)
 Free all memory associated with a jwt_set_t, including any jwk_item_t in the set.
 
JWT_EX int jwks_item_free (jwk_set_t *jwk_set, size_t index)
 Free all memory associated with the nth jwt_item_t in a jwk_set.
 
JWT_EX int jwks_item_free_all (jwk_set_t *jwk_set)
 Free all memory associated with alljwt_item_t in a jwk_set.
 
+

Detailed Description

+

Functions to handle JSON that represents JWK and JWKS for use in validating JWT objects.

+

Typedef Documentation

+ +

◆ jwk_set_t

+ +
+
+ + + + +
typedef struct jwk_set jwk_set_t
+
+ +

Opaque JWKS object.

+

Used for working with JSON Web Keys and JWK Sets (JWKS).

+
Remarks
All JWK operations require that you import your JWK into a jwk_set_t first. Internal, LibJWT creates a jwk_set_t even for single keys. This makes code pretty much the same whether working with one JWK or a set of them.
+ +

Definition at line 87 of file jwt.h.

+ +
+
+

Enumeration Type Documentation

+ +

◆ jwk_key_op_t

+ +
+
+ + + + +
enum jwk_key_op_t
+
+ +

Allowed key operations for JWK private keys.

+

A JWK can support one or more of these bitwise flag operations. The names correspond with the RFC.

+
if (@ref jwt_item_t.key_ops & (JWK_KEY_OP_SIGN | JWK_KEY_OP_ENCRYPT)) {
+
...
+
}
+
@ JWK_KEY_OP_ENCRYPT
Used for encryption.
Definition jwt.h:186
+
@ JWK_KEY_OP_SIGN
Signing.
Definition jwt.h:184
+

RFC-7517 Sec 4.3

+ + + + + + + + + + + +
Enumerator
JWK_KEY_OP_NONE 

No key_op set.

+
JWK_KEY_OP_SIGN 

Signing.

+
JWK_KEY_OP_VERIFY 

Signature verification.

+
JWK_KEY_OP_ENCRYPT 

Used for encryption.

+
JWK_KEY_OP_DECRYPT 

Used for decrypting.

+
JWK_KEY_OP_WRAP 

For wrapping other keys.

+
JWK_KEY_OP_UNWRAP 

For unwrappng other keys.

+
JWK_KEY_OP_DERIVE_KEY 

Key derivation.

+
JWK_KEY_OP_DERIVE_BITS 

Bits derivation.

+
JWK_KEY_OP_INVALID 

Invalid key_ops in JWK.

+
+ +

Definition at line 182 of file jwt.h.

+ +
+
+ +

◆ jwk_key_type_t

+ +
+
+ + + + +
enum jwk_key_type_t
+
+ +

JWK Key Types.

+

Corresponds to the "kty" attribute of the JWK.

+

RFC-7517 Sec 4.1

+ + + + + +
Enumerator
JWK_KEY_TYPE_NONE 

Unused on valid keys.

+
JWK_KEY_TYPE_EC 

Eliptic Curve keys.

+
JWK_KEY_TYPE_RSA 

RSA keys (RSA and RSA-PSS)

+
JWK_KEY_TYPE_OKP 

Octet Key Pair (e.g.

+

EDDSA)

+
+ +

Definition at line 148 of file jwt.h.

+ +
+
+ +

◆ jwk_pub_key_use_t

+ +
+
+ + + + +
enum jwk_pub_key_use_t
+
+ +

Usage types for JWK public keys.

+

Corresponds to the "use" attribute in a valid JWK.

+

RFC-7517 Sec 4.2

+ + + + +
Enumerator
JWK_PUB_KEY_USE_NONE 

No usable attribute was set.

+
JWK_PUB_KEY_USE_SIG 

Signature validation (JWS)

+
JWK_PUB_KEY_USE_ENC 

Decryption key (JWE)

+
+ +

Definition at line 162 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwks_create()

+ +
+
+ + + + + + + +
JWT_EX jwk_set_t * jwks_create (const char * jwk_json_str)
+
+ +

Create a new JWKS object for later use in validating JWTs.

+

This function expects a JSON string either as a single object for one JWK or as an array of objects under a key of "keys" (as defined in JWKS specifications).

+

If non-NULL is returned, you should then check to make sure there is no error with jwks_error(). There may be errors on individual JWK items in the set. You can check if there are any with jwks_error_any().

+
Parameters
+ + +
jwk_json_strJSON string representation of a single key or array of "keys". If NULL is passed, an empty jwk_set_t is created.
+
+
+
Returns
A valid jwt_set_t on success. On failure, either NULL or a jwt_set_t with error set. NULL generally means ENOMEM.
+ +
+
+ +

◆ jwks_error()

+ +
+
+ + + + + + + +
JWT_EX int jwks_error (jwk_set_t * jwk_set)
+
+ +

Check if there is an error within the jwk_set.

+

To get a string describing the error, use jwks_error_str.

+
Parameters
+ + +
jwk_setAn existing jwk_set_t
+
+
+
Returns
0 if no error exists, 1 if it does exists.
+ +
+
+ +

◆ jwks_error_any()

+ +
+
+ + + + + + + +
JWT_EX int jwks_error_any (jwk_set_t * jwk_set)
+
+ +

Check if there is an error within the jwk_set and any of the jwk_item_t in the set.

+
Parameters
+ + +
jwk_setAn existing jwk_set_t
+
+
+
Returns
0 if no error exists, 1 if any exists.
+ +
+
+ +

◆ jwks_error_msg()

+ +
+
+ + + + + + + +
JWT_EX const char * jwks_error_msg (jwk_set_t * jwk_set)
+
+ +

Retrieve an error message from a jwk_set.

+

Note, a zero length string is valid if jwos_error() returns non-zero.

+
Parameters
+ + +
jwk_setAn existing jwk_set_t
+
+
+
Returns
NULL on error, valid string otherwise
+ +
+
+ +

◆ jwks_free()

+ +
+
+ + + + + + + +
JWT_EX void jwks_free (jwk_set_t * jwk_set)
+
+ +

Free all memory associated with a jwt_set_t, including any jwk_item_t in the set.

+
Parameters
+ + +
jwk_setAn existing jwk_set_t
+
+
+ +
+
+ +

◆ jwks_item_add()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwks_item_add (jwk_set_t * jwk_set,
jwk_item_t * item )
+
+ +

Add a jwk_item_t to an existing jwk_set_t.

+
Parameters
+ + + +
jwk_setAn existing jwk_set_t
itemA JWK item to add to the set
+
+
+
Returns
0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwks_item_free()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwks_item_free (jwk_set_t * jwk_set,
size_t index )
+
+ +

Free all memory associated with the nth jwt_item_t in a jwk_set.

+
Parameters
+ + + +
jwk_setA JWKS object
indexthe position of the item in the index
+
+
+
Returns
0 if no item was was deleted (found), 1 if it was
+ +
+
+ +

◆ jwks_item_free_all()

+ +
+
+ + + + + + + +
JWT_EX int jwks_item_free_all (jwk_set_t * jwk_set)
+
+ +

Free all memory associated with alljwt_item_t in a jwk_set.

+

The jwk_set becomes an empty set.

+
Parameters
+ + +
jwk_setA JWKS object
+
+
+
Returns
The numbner of items deleted
+ +
+
+ +

◆ jwks_item_get()

+ +
+
+ + + + + + + + + + + +
JWT_EX jwk_item_t * jwks_item_get (jwk_set_t * jwk_set,
size_t index )
+
+ +

Return the index'th jwk_item in the jwk_set.

+

Allows you to obtain the raw jwk_item. NOTE, this is not a copy of the item, so any changes to it will be reflected to it in the jwk_set. This also means if the jwk_set is freed, then this data is freed and cannot be used.

+
Parameters
+ + + +
jwk_setAn existing jwk_set_t
indexIndex of the jwk_set
+
+
+
Returns
0 if no error exists, 1 if it does exists.
+
Remarks
It's also worth pointing out that the index of a specific jwk_item in a jwk_set can and will change if items are added or removed. from the jwk_set.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwks__core__grp.js b/HEAD/group__jwks__core__grp.js new file mode 100644 index 00000000..155dd547 --- /dev/null +++ b/HEAD/group__jwks__core__grp.js @@ -0,0 +1,51 @@ +var group__jwks__core__grp = +[ + [ "jwk_item_t", "structjwk__item__t.html", [ + [ "alg", "structjwk__item__t.html#aae5092f40a4bfbe9155ddde65f5b933f", null ], + [ "bits", "structjwk__item__t.html#a2a87bc6fcdbdbd234f1beee3ba63ea61", null ], + [ "curve", "structjwk__item__t.html#a3840bd4c87181411e0f3012c020787b3", null ], + [ "error", "structjwk__item__t.html#ae5aef5762e38fc66625cedc461a32ece", null ], + [ "error_msg", "structjwk__item__t.html#a2840975767dbdc020912682c06ebdb75", null ], + [ "is_private_key", "structjwk__item__t.html#a58ab0832602b475e7c3a7009925db87e", null ], + [ "key_ops", "structjwk__item__t.html#a44fe44eb2d9c9466c48f19cd5f590e21", null ], + [ "kid", "structjwk__item__t.html#a874da82b485b8c541ecd0f3f8fd12a0f", null ], + [ "kty", "structjwk__item__t.html#ae2d7fed09d97d0ac3e6571e7c897d580", null ], + [ "pem", "structjwk__item__t.html#afecd2ad6ce52bf49a202999c184a9b2e", null ], + [ "provider", "structjwk__item__t.html#a892ffdca6722b35e24d885f01edd6679", null ], + [ "provider_data", "structjwk__item__t.html#a6cf519323148008f4549798d7df1d8f3", null ], + [ "use", "structjwk__item__t.html#a8790b92f608e12757ba07dff49b931df", null ] + ] ], + [ "jwk_set_t", "group__jwks__core__grp.html#ga380f2d92f1d0d306420729f9789f5e50", null ], + [ "jwk_key_op_t", "group__jwks__core__grp.html#ga150285e933a3d456bcd8d87b906438a3", [ + [ "JWK_KEY_OP_NONE", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a9054426563814eff0f4ea23def0e00f9", null ], + [ "JWK_KEY_OP_SIGN", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a893a71fda7261466815427686f349eef", null ], + [ "JWK_KEY_OP_VERIFY", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a76ea53a146dac84cffa46681bbc7fc2e", null ], + [ "JWK_KEY_OP_ENCRYPT", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a1101574110cba3dd17ff829d728ceb5b", null ], + [ "JWK_KEY_OP_DECRYPT", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a9a4c0f1119d858a8bda1f7cecfb98d79", null ], + [ "JWK_KEY_OP_WRAP", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a451f04d391cf27e7938c6b29324272c8", null ], + [ "JWK_KEY_OP_UNWRAP", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a56462a753babcb3a1593a5436d677667", null ], + [ "JWK_KEY_OP_DERIVE_KEY", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3adb8b6296fb02fd5e961d89310edf7ce6", null ], + [ "JWK_KEY_OP_DERIVE_BITS", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a073d4ad92c0276dbc1ecdc874231ce39", null ], + [ "JWK_KEY_OP_INVALID", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3aeb336579eb3c3c3e6f563b2a36d1511f", null ] + ] ], + [ "jwk_key_type_t", "group__jwks__core__grp.html#ga6ee53248054c67e9585aae9e937890f2", [ + [ "JWK_KEY_TYPE_NONE", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2a91865197de901ef236c5570a7c6897d9", null ], + [ "JWK_KEY_TYPE_EC", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2ad7065b821b8699d3b42fe0c3263dd3b1", null ], + [ "JWK_KEY_TYPE_RSA", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2af1a4bf01f937df96d195572180f036d8", null ], + [ "JWK_KEY_TYPE_OKP", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2ab42a328b8fc31e10c3f5e38e953c684c", null ] + ] ], + [ "jwk_pub_key_use_t", "group__jwks__core__grp.html#gab30049eeae2a6ecdc0c9ae849b835b6b", [ + [ "JWK_PUB_KEY_USE_NONE", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6baf3e36efeb7307384fa7f7dbee089573b", null ], + [ "JWK_PUB_KEY_USE_SIG", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6ba5c6c707d72a666971135ad6bec551b99", null ], + [ "JWK_PUB_KEY_USE_ENC", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6baefac5505199173f9c52530be55a54408", null ] + ] ], + [ "jwks_create", "group__jwks__core__grp.html#ga98344761fc19ea7ee5390ae9e8d2cca7", null ], + [ "jwks_error", "group__jwks__core__grp.html#gaa084f1f35b118c90e23fec8424e83e4e", null ], + [ "jwks_error_any", "group__jwks__core__grp.html#gaa1de410ba108a14f9aa74575105a06a5", null ], + [ "jwks_error_msg", "group__jwks__core__grp.html#gaf334f7d92468eeca912fbd540a3cd290", null ], + [ "jwks_free", "group__jwks__core__grp.html#ga7f26c5a8c1acb214f9d7e64001281fc4", null ], + [ "jwks_item_add", "group__jwks__core__grp.html#ga0412942c5cb9ebc33a138d58be87a328", null ], + [ "jwks_item_free", "group__jwks__core__grp.html#ga545755c81613b5959422b7ed90db389a", null ], + [ "jwks_item_free_all", "group__jwks__core__grp.html#gad13bed808cadfa3f1fff97d678e4a3e7", null ], + [ "jwks_item_get", "group__jwks__core__grp.html#ga916f7aec6ec88984dc878c85f6218d9e", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__alg__grp.html b/HEAD/group__jwt__alg__grp.html new file mode 100644 index 00000000..53813970 --- /dev/null +++ b/HEAD/group__jwt__alg__grp.html @@ -0,0 +1,269 @@ + + + + + + + + +LibJWT: Algorithm Management + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Algorithm Management
+
+
+ +

Set and check algorithms and algorithm specific values. +More...

+
+Collaboration diagram for Algorithm Management:
+
+
+ + + + +
+ + + + + + + + + + + + + + +

+Functions

JWT_EX int jwt_set_alg (jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len)
 Set an algorithm for a jwt_t object.
 
JWT_EX jwt_alg_t jwt_get_alg (const jwt_t *jwt)
 Get the jwt_alg_t set for this JWT object.
 
JWT_EX const char * jwt_alg_str (jwt_alg_t alg)
 Convert alg type to it's string representation.
 
JWT_EX jwt_alg_t jwt_str_alg (const char *alg)
 Convert alg string to type.
 
+

Detailed Description

+

Set and check algorithms and algorithm specific values.

+

When working with functions that require a key, the underlying library takes care to scrub memory when the key is no longer used (e.g. when calling jwt_free() or when changing the algorithm, the old key, if it exists, is scrubbed).

+

Function Documentation

+ +

◆ jwt_alg_str()

+ +
+
+ + + + + + + +
JWT_EX const char * jwt_alg_str (jwt_alg_t alg)
+
+ +

Convert alg type to it's string representation.

+

Returns a string that matches the alg type provided.

+
Parameters
+ + +
algA valid jwt_alg_t specifier.
+
+
+
Returns
Returns a string (e.g. "RS256") matching the alg or NULL for invalid alg.
+ +
+
+ +

◆ jwt_get_alg()

+ +
+
+ + + + + + + +
JWT_EX jwt_alg_t jwt_get_alg (const jwt_t * jwt)
+
+ +

Get the jwt_alg_t set for this JWT object.

+

Returns the jwt_alg_t type for this JWT object.

+
Warning
This is the alg for the jwt_t object and NOT the one that may be set in the header. This is a programatic check to see what LibJWT will use to encode the object into a JWT. To see what is embedded in the header, use jwt_get_header(jwt, "alg") instead.
+
Parameters
+ + +
jwtPointer to a JWT object.
+
+
+
Returns
Returns a jwt_alg_t type for this object.
+ +
+
+ +

◆ jwt_set_alg()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
JWT_EX int jwt_set_alg (jwt_t * jwt,
jwt_alg_t alg,
const unsigned char * key,
int len )
+
+ +

Set an algorithm for a jwt_t object.

+

Specifies an algorithm for a jwt_t object. If JWT_ALG_NONE is used, then key must be NULL and len must be 0. All other algorithms must have a valid pointer to key data, which may be specific to the algorithm (e.g RS256 expects a PEM formatted RSA key).

+
Parameters
+ + + + + +
jwtPointer to a jwt_t object.
algA valid jwt_alg_t specifier.
keyThe key data to use for the algorithm.
lenThe length of the key data.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_str_alg()

+ +
+
+ + + + + + + +
JWT_EX jwt_alg_t jwt_str_alg (const char * alg)
+
+ +

Convert alg string to type.

+

Returns an alg type based on the string representation.

+

RFC-7518 Sec 3.1

+
Parameters
+ + +
algA valid string for algorithm type (e.g. "RS256").
+
+
+
Returns
Returns a jwt_alg_t matching the string or JWT_ALG_INVAL if no matches were found.
+

Note, this only works for algorithms that LibJWT supports or knows about.

+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__alg__grp.js b/HEAD/group__jwt__alg__grp.js new file mode 100644 index 00000000..d711df36 --- /dev/null +++ b/HEAD/group__jwt__alg__grp.js @@ -0,0 +1,7 @@ +var group__jwt__alg__grp = +[ + [ "jwt_alg_str", "group__jwt__alg__grp.html#gae91ac529fd01b9b8e460bc139ac3d815", null ], + [ "jwt_get_alg", "group__jwt__alg__grp.html#ga364eef40d9a6c8e4770e0dd51aa22f25", null ], + [ "jwt_set_alg", "group__jwt__alg__grp.html#ga575a8ddf4f93aa4244178305a9d256b3", null ], + [ "jwt_str_alg", "group__jwt__alg__grp.html#ga48166bba74d72030639de583fca0647f", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__alg__grp.map b/HEAD/group__jwt__alg__grp.map new file mode 100644 index 00000000..8d0ca292 --- /dev/null +++ b/HEAD/group__jwt__alg__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__alg__grp.md5 b/HEAD/group__jwt__alg__grp.md5 new file mode 100644 index 00000000..ba989288 --- /dev/null +++ b/HEAD/group__jwt__alg__grp.md5 @@ -0,0 +1 @@ +bca2f7a103cd65e2dda206956ed4a40d \ No newline at end of file diff --git a/HEAD/group__jwt__alg__grp.png b/HEAD/group__jwt__alg__grp.png new file mode 100644 index 00000000..5abeaa31 Binary files /dev/null and b/HEAD/group__jwt__alg__grp.png differ diff --git a/HEAD/group__jwt__core__grp.html b/HEAD/group__jwt__core__grp.html new file mode 100644 index 00000000..f053ce57 --- /dev/null +++ b/HEAD/group__jwt__core__grp.html @@ -0,0 +1,344 @@ + + + + + + + + +LibJWT: Object Creation + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Object Creation
+
+
+ +

Functions used to create and destroy JWT objects. +More...

+
+Collaboration diagram for Object Creation:
+
+
+ + + + +
+ + + + + +

+Typedefs

typedef struct jwt jwt_t
 <
 
+ + + + +

+Enumerations

enum  jwt_alg_t {
+  JWT_ALG_NONE +, JWT_ALG_HS256 +, JWT_ALG_HS384 +, JWT_ALG_HS512 +,
+  JWT_ALG_RS256 +, JWT_ALG_RS384 +, JWT_ALG_RS512 +, JWT_ALG_ES256 +,
+  JWT_ALG_ES384 +, JWT_ALG_ES512 +, JWT_ALG_PS256 +, JWT_ALG_PS384 +,
+  JWT_ALG_PS512 +, JWT_ALG_ES256K +, JWT_ALG_EDDSA +, JWT_ALG_INVAL +
+ }
 JWT algorithm types. More...
 
+ + + + + + + + + + +

+Functions

JWT_EX int jwt_new (jwt_t **jwt)
 Allocate a new, empty, JWT object.
 
JWT_EX void jwt_free (jwt_t *jwt)
 Free a JWT object and any other resources it is using.
 
JWT_EX jwt_tjwt_dup (jwt_t *jwt)
 Duplicate an existing JWT object.
 
+

Detailed Description

+

Functions used to create and destroy JWT objects.

+

Typedef Documentation

+ +

◆ jwt_t

+ +
+
+ + + + +
typedef struct jwt jwt_t
+
+ +

<

+

Opaque JWT object

+

This object is used throughout the JWT functions.

+
Remarks
When creating a JWT object (encoding), this stores state until you call one of the encoding functions. When dedcoding a JSON Web Token this object is returned so you can inspect it further (e.g. retreive grants).
+ +

Definition at line 68 of file jwt.h.

+ +
+
+

Enumeration Type Documentation

+ +

◆ jwt_alg_t

+ +
+
+ + + + +
enum jwt_alg_t
+
+ +

JWT algorithm types.

+

These are the supported algorithm types for LibJWT.

+
Warning
You should not assume that this directly relates to what may be in the JWT header. The internal state of the jwt_t object and the JSON data are only guarateed to be in sync during encoding and decoding.
+
Note
For HMAC algorithms, the key can be any data, even binary. However, for all the other algorithms, the key is expected to be in a format that the underlying Cryptographic Operations can interpret. Generally, PEM is a safe bet.
+

RFC-7518 Sec 3.1

+ + + + + + + + + + + + + + + + + +
Enumerator
JWT_ALG_NONE 

No signature.

+
JWT_ALG_HS256 

HMAC using SHA-256.

+
JWT_ALG_HS384 

HMAC using SHA-384.

+
JWT_ALG_HS512 

HMAC using SHA-512.

+
JWT_ALG_RS256 

RSASSA-PKCS1-v1_5 using SHA-256.

+
JWT_ALG_RS384 

RSASSA-PKCS1-v1_5 using SHA-384.

+
JWT_ALG_RS512 

RSASSA-PKCS1-v1_5 using SHA-512.

+
JWT_ALG_ES256 

ECDSA using P-256 and SHA-256.

+
JWT_ALG_ES384 

ECDSA using P-384 and SHA-384.

+
JWT_ALG_ES512 

ECDSA using P-521 and SHA-512.

+
JWT_ALG_PS256 

RSASSA-PSS using SHA-256 and MGF1 with SHA-256.

+
JWT_ALG_PS384 

RSASSA-PSS using SHA-384 and MGF1 with SHA-384.

+
JWT_ALG_PS512 

RSASSA-PSS using SHA-512 and MGF1 with SHA-512.

+
JWT_ALG_ES256K 

ECDSA using secp256k1 and SHA-256.

+
JWT_ALG_EDDSA 

EdDSA using Ed25519.

+
JWT_ALG_INVAL 

An invalid algorithm from the caller or the token.

+
+ +

Definition at line 105 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwt_dup()

+ +
+
+ + + + + + + +
JWT_EX jwt_t * jwt_dup (jwt_t * jwt)
+
+ +

Duplicate an existing JWT object.

+

Copies all grants and algorithm specific bits to a new JWT object.

+
Parameters
+ + +
jwtPointer to a JWT object.
+
+
+
Returns
A new object on success, NULL on error with errno set appropriately.
+ +
+
+ +

◆ jwt_free()

+ +
+
+ + + + + + + +
JWT_EX void jwt_free (jwt_t * jwt)
+
+ +

Free a JWT object and any other resources it is using.

+

After calling, the JWT object referenced will no longer be valid and its memory will be freed.

+
Parameters
+ + +
jwtPointer to a JWT object previously created with jwt_new or jwt_decode.
+
+
+ +
+
+ +

◆ jwt_new()

+ +
+
+ + + + + + + +
JWT_EX int jwt_new (jwt_t ** jwt)
+
+ +

Allocate a new, empty, JWT object.

+

This is used to create a new object that would be passed to one of the Encoding and Output functions once setup.

+
{
+
jwt_t *MyJWT = NULL;
+
+
if (jwt_new(&MyJWT))
+
...handle error...
+
+
...create JWT...
+
+
jwt_free(MyJWT);
+
}
+
JWT_EX int jwt_new(jwt_t **jwt)
Allocate a new, empty, JWT object.
+
struct jwt jwt_t
<
Definition jwt.h:68
+
JWT_EX void jwt_free(jwt_t *jwt)
Free a JWT object and any other resources it is using.
+
Parameters
+ + +
jwtPointer to a JWT object pointer. Will be allocated on success.
+
+
+
Returns
0 on success, valid errno otherwise.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__core__grp.js b/HEAD/group__jwt__core__grp.js new file mode 100644 index 00000000..0ab921cf --- /dev/null +++ b/HEAD/group__jwt__core__grp.js @@ -0,0 +1,25 @@ +var group__jwt__core__grp = +[ + [ "jwt_t", "group__jwt__core__grp.html#gabf0acfb990d245214216af589c1d0947", null ], + [ "jwt_alg_t", "group__jwt__core__grp.html#ga889db178d8714ab67bc994f1d8faad33", [ + [ "JWT_ALG_NONE", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a3249a71140a0bb4b3cb196fe15114b89", null ], + [ "JWT_ALG_HS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aaa9217f4c8f5266d5401402f0ec98604", null ], + [ "JWT_ALG_HS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33af0adc69b9caa89fbc2eeaf744d7cf4f2", null ], + [ "JWT_ALG_HS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a596b0da85c01e17b43a6574f82159081", null ], + [ "JWT_ALG_RS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aa03ba981baa4b1cda3b9de1347ada853", null ], + [ "JWT_ALG_RS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a520814a2695a6df472bb408ba6feb206", null ], + [ "JWT_ALG_RS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ab4d732eef3f6bee21201d638dfd8ca44", null ], + [ "JWT_ALG_ES256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a84f9bf1cb93f6ae622a9de57d9c67472", null ], + [ "JWT_ALG_ES384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ae18e69e6b629aa0d3e6d16ec4a95c708", null ], + [ "JWT_ALG_ES512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a87205e19f1dde7c3cee012424482e106", null ], + [ "JWT_ALG_PS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ad0216cbdf24f6b486d5082294b3cfc5b", null ], + [ "JWT_ALG_PS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a3ad3c7e704886dd61dee0de5fa02072d", null ], + [ "JWT_ALG_PS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a727c838b47ad911681eb029cc8b55744", null ], + [ "JWT_ALG_ES256K", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a7f760cf9ed49b80ecb78580ed381ff01", null ], + [ "JWT_ALG_EDDSA", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aab33738e67e3b23db72a3bc77043009b", null ], + [ "JWT_ALG_INVAL", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a199f5ce0e69c0160cc121cf6dbe9cb58", null ] + ] ], + [ "jwt_dup", "group__jwt__core__grp.html#ga4f08487beba3df7c581e1ec19d56c228", null ], + [ "jwt_free", "group__jwt__core__grp.html#gac7f03a454a32ab8da207d0188f23543c", null ], + [ "jwt_new", "group__jwt__core__grp.html#ga534a2c12f9b7c509c9ea86d0f465d604", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__core__grp.map b/HEAD/group__jwt__core__grp.map new file mode 100644 index 00000000..a9662266 --- /dev/null +++ b/HEAD/group__jwt__core__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__core__grp.md5 b/HEAD/group__jwt__core__grp.md5 new file mode 100644 index 00000000..badde5a8 --- /dev/null +++ b/HEAD/group__jwt__core__grp.md5 @@ -0,0 +1 @@ +3d4b64ce94f04237c6750ab548a64e98 \ No newline at end of file diff --git a/HEAD/group__jwt__core__grp.png b/HEAD/group__jwt__core__grp.png new file mode 100644 index 00000000..df973042 Binary files /dev/null and b/HEAD/group__jwt__core__grp.png differ diff --git a/HEAD/group__jwt__crypto__grp.html b/HEAD/group__jwt__crypto__grp.html new file mode 100644 index 00000000..f818e4f5 --- /dev/null +++ b/HEAD/group__jwt__crypto__grp.html @@ -0,0 +1,302 @@ + + + + + + + + +LibJWT: Cryptographic Operations + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Cryptographic Operations
+
+
+ +

Functions used to set and get which crypto operations are used +More...

+
+Collaboration diagram for Cryptographic Operations:
+
+
+ + + + +
+ + + + + +

+Enumerations

enum  jwt_crypto_provider_t { JWT_CRYPTO_OPS_NONE +, JWT_CRYPTO_OPS_OPENSSL +, JWT_CRYPTO_OPS_GNUTLS +, JWT_CRYPTO_OPS_MBEDTLS + }
 Different providers for crypto operations. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

JWT_EX const char * jwt_get_crypto_ops (void)
 Retrieve the name of the current crypto operations being used.
 
JWT_EX jwt_crypto_provider_t jwt_get_crypto_ops_t (void)
 Retrieve the type of the current crypto operations being used.
 
JWT_EX int jwt_set_crypto_ops (const char *opname)
 Set the crypto operations to the named set.
 
JWT_EX int jwt_set_crypto_ops_t (jwt_crypto_provider_t opname)
 Set the crypto operations to a jwt_crypto_provider_t type.
 
JWT_EX int jwt_crypto_ops_supports_jwk (void)
 Check if the current crypto operations support JWK usage.
 
+

Detailed Description

+

Functions used to set and get which crypto operations are used

+

LibJWT supports several crypto libaries, mainly "openssl" and "gnutls". By default, if enabled, "openssl" is used.

+
Warning
Changing the crypto operations is not thread safe. You must protect changing them with some sort of lock, including locking around usage of the operations themselves. Ideally, you should only perform this at the start of your application before using any of LibJWTs functions. Failing to follow this guide can lead to crashes in certain situations.
+
Remarks
ENVIRONMENT: You can set JWT_CRYPTO to the default operations you wish to use. If JWT_CRYPTO is invalid, an error message will be printed to the console when LibJWT is loaded by the application.
+

Enumeration Type Documentation

+ +

◆ jwt_crypto_provider_t

+ +
+
+ + + + +
enum jwt_crypto_provider_t
+
+ +

Different providers for crypto operations.

+

Used to set or test the underlying cryptographic library provider.

+
Remarks
These being present are not a guarantee that the JWT library has been compiled to support it. Also, certain functions of the library may not be supported by each. For example, not all of them support JWKS operations.
+ + + + + +
Enumerator
JWT_CRYPTO_OPS_NONE 

Used for error handling.

+
JWT_CRYPTO_OPS_OPENSSL 

OpenSSL Library.

+
JWT_CRYPTO_OPS_GNUTLS 

GnuTLS Library.

+
JWT_CRYPTO_OPS_MBEDTLS 

MBedTLS embedded library.

+
+ +

Definition at line 134 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwt_crypto_ops_supports_jwk()

+ +
+
+ + + + + + + +
JWT_EX int jwt_crypto_ops_supports_jwk (void )
+
+ +

Check if the current crypto operations support JWK usage.

+
Returns
1 if it does, 0 if not
+ +
+
+ +

◆ jwt_get_crypto_ops()

+ +
+
+ + + + + + + +
JWT_EX const char * jwt_get_crypto_ops (void )
+
+ +

Retrieve the name of the current crypto operations being used.

+
Returns
name of the crypto operation set
+ +
+
+ +

◆ jwt_get_crypto_ops_t()

+ +
+
+ + + + + + + +
JWT_EX jwt_crypto_provider_t jwt_get_crypto_ops_t (void )
+
+ +

Retrieve the type of the current crypto operations being used.

+
Returns
jwt_crypto_provider_t of the crypto operation set
+ +
+
+ +

◆ jwt_set_crypto_ops()

+ +
+
+ + + + + + + +
JWT_EX int jwt_set_crypto_ops (const char * opname)
+
+ +

Set the crypto operations to the named set.

+

The opname is one of the available operators in the compiled version of LibJWT. Most times, this is either "openssl" or "gnutls".

+
Parameters
+ + +
opnamethe name of the crypto operation to set
+
+
+
Returns
0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_set_crypto_ops_t()

+ +
+
+ + + + + + + +
JWT_EX int jwt_set_crypto_ops_t (jwt_crypto_provider_t opname)
+
+ +

Set the crypto operations to a jwt_crypto_provider_t type.

+

The same as jwt_set_crypto_ops(), but uses the type as opname

+
Parameters
+ + +
opnameA valid jwt_crypto_provider_t type
+
+
+
Returns
0 on success, valid errno otherwise.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__crypto__grp.js b/HEAD/group__jwt__crypto__grp.js new file mode 100644 index 00000000..3e81c6b7 --- /dev/null +++ b/HEAD/group__jwt__crypto__grp.js @@ -0,0 +1,14 @@ +var group__jwt__crypto__grp = +[ + [ "jwt_crypto_provider_t", "group__jwt__crypto__grp.html#gaa1e2b1f241858d81b1bfb86018d3b3ac", [ + [ "JWT_CRYPTO_OPS_NONE", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca482aa19a4996aaddbfd0349356be92c2", null ], + [ "JWT_CRYPTO_OPS_OPENSSL", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca5ebef71958d3135b13ada7bb72a63b02", null ], + [ "JWT_CRYPTO_OPS_GNUTLS", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3acaee34d6e9a11bfaa47e01c56a66682750", null ], + [ "JWT_CRYPTO_OPS_MBEDTLS", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca4c5fd08d7061b5caba0f8698dc817306", null ] + ] ], + [ "jwt_crypto_ops_supports_jwk", "group__jwt__crypto__grp.html#ga474657beb4da21302cb8749cd252ff99", null ], + [ "jwt_get_crypto_ops", "group__jwt__crypto__grp.html#ga33cf3289adddfce70dd01a0fc0a35b30", null ], + [ "jwt_get_crypto_ops_t", "group__jwt__crypto__grp.html#gac876000474c98d4b43156bd184958ddc", null ], + [ "jwt_set_crypto_ops", "group__jwt__crypto__grp.html#gaf2ecab819fff188a5f2ef561f2c064d4", null ], + [ "jwt_set_crypto_ops_t", "group__jwt__crypto__grp.html#gab1a923883a96ce4e29326d35d7988a7f", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__crypto__grp.map b/HEAD/group__jwt__crypto__grp.map new file mode 100644 index 00000000..29550152 --- /dev/null +++ b/HEAD/group__jwt__crypto__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__crypto__grp.md5 b/HEAD/group__jwt__crypto__grp.md5 new file mode 100644 index 00000000..baddc2b6 --- /dev/null +++ b/HEAD/group__jwt__crypto__grp.md5 @@ -0,0 +1 @@ +ec479520d2e027cf380321531bd00f47 \ No newline at end of file diff --git a/HEAD/group__jwt__crypto__grp.png b/HEAD/group__jwt__crypto__grp.png new file mode 100644 index 00000000..a29626a2 Binary files /dev/null and b/HEAD/group__jwt__crypto__grp.png differ diff --git a/HEAD/group__jwt__encode__grp.html b/HEAD/group__jwt__encode__grp.html new file mode 100644 index 00000000..fdc399cd --- /dev/null +++ b/HEAD/group__jwt__encode__grp.html @@ -0,0 +1,334 @@ + + + + + + + + +LibJWT: Encoding and Output + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Encoding and Output
+
+
+ +

Functions for encoding a valid JWT optionally (but preferably) using JWA operation such as sigining or encryption. +More...

+
+Collaboration diagram for Encoding and Output:
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX int jwt_dump_fp (jwt_t *jwt, FILE *fp, int pretty)
 Output plain text representation to a FILE pointer.
 
JWT_EX char * jwt_dump_str (jwt_t *jwt, int pretty)
 Return plain text representation as a string.
 
JWT_EX char * jwt_dump_grants_str (jwt_t *jwt, int pretty)
 Return plain text representation of grants as a string.
 
JWT_EX int jwt_encode_fp (jwt_t *jwt, FILE *fp)
 Fully encode a JWT object and write it to FILE.
 
JWT_EX char * jwt_encode_str (jwt_t *jwt)
 Fully encode a JWT object and return as a string.
 
JWT_EX void jwt_free_str (char *str)
 Free a string returned from the library.
 
+

Detailed Description

+

Functions for encoding a valid JWT optionally (but preferably) using JWA operation such as sigining or encryption.

+

Function Documentation

+ +

◆ jwt_dump_fp()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_dump_fp (jwt_t * jwt,
FILE * fp,
int pretty )
+
+ +

Output plain text representation to a FILE pointer.

+

This function will write a plain text representation of this JWT object without Base64 encoding. This only writes the header and body, and does not compute the signature or encryption (if such an algorithm were being used).

+
Remarks
This may change the content of JWT header if algorithm is set on the JWT object. If algorithm is set (jwt_set_alg was called on the jwt object) then dumping JWT attempts to append 'typ' header. If the 'typ' header already exists, then it is left untouched, otherwise it is added with default value of "JWT".
+
Parameters
+ + + + +
jwtPointer to a JWT object.
fpValid FILE pointer to write data to.
prettyEnables better visual formatting of output. Generally only used for debugging.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_dump_grants_str()

+ +
+
+ + + + + + + + + + + +
JWT_EX char * jwt_dump_grants_str (jwt_t * jwt,
int pretty )
+
+ +

Return plain text representation of grants as a string.

+

Similar to jwt_dump_str() except that only a string containing the grants string is returned. The string must be freed by the caller.

+
Parameters
+ + + +
jwtPointer to a JWT object.
prettyEnables better visual formatting of output. Generally only used for debugging.
+
+
+
Returns
A nul terminated string on success, NULL on error with errno set appropriately.
+ +
+
+ +

◆ jwt_dump_str()

+ +
+
+ + + + + + + + + + + +
JWT_EX char * jwt_dump_str (jwt_t * jwt,
int pretty )
+
+ +

Return plain text representation as a string.

+

Similar to jwt_dump_fp() except that a string is returned. The string must be freed by the caller.

+
Remarks
This may change the content of JWT header if algorithm is set on the JWT object. If algorithm is set (jwt_set_alg was called on the jwt object) then dumping JWT attempts to append 'typ' header. If the 'typ' header already exists, then it is left untouched, otherwise it is added with default value of "JWT".
+
Parameters
+ + + +
jwtPointer to a JWT object.
prettyEnables better visual formatting of output. Generally only used for debugging.
+
+
+
Returns
A nul terminated string on success, NULL on error with errno set appropriately.
+ +
+
+ +

◆ jwt_encode_fp()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_encode_fp (jwt_t * jwt,
FILE * fp )
+
+ +

Fully encode a JWT object and write it to FILE.

+

This will create and write the complete JWT object to FILE. All parts will be Base64 encoded and signatures or encryption will be applied if the algorithm specified requires it.

+
Parameters
+ + + +
jwtPointer to a JWT object.
fpValid FILE pointer to write data to.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_encode_str()

+ +
+
+ + + + + + + +
JWT_EX char * jwt_encode_str (jwt_t * jwt)
+
+ +

Fully encode a JWT object and return as a string.

+

Similar to jwt_encode_fp() except that a string is returned. The string must be freed by the caller. If you changed the allocation method using jwt_set_alloc, then you must use jwt_free_str() to free the memory.

+
Parameters
+ + +
jwtPointer to a JWT object.
+
+
+
Returns
A null terminated string on success, NULL on error with errno set appropriately.
+ +
+
+ +

◆ jwt_free_str()

+ +
+
+ + + + + + + +
JWT_EX void jwt_free_str (char * str)
+
+ +

Free a string returned from the library.

+
Parameters
+ + +
strPointer to a string previously created with jwt_encode_str().
+
+
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__encode__grp.js b/HEAD/group__jwt__encode__grp.js new file mode 100644 index 00000000..bcf63622 --- /dev/null +++ b/HEAD/group__jwt__encode__grp.js @@ -0,0 +1,9 @@ +var group__jwt__encode__grp = +[ + [ "jwt_dump_fp", "group__jwt__encode__grp.html#ga11e99992cb0546fb0e7800a63ad46c46", null ], + [ "jwt_dump_grants_str", "group__jwt__encode__grp.html#ga88852a075b9fb57e4bcbd502b9e4378d", null ], + [ "jwt_dump_str", "group__jwt__encode__grp.html#gab8d2787c3f2413f24dc93f6d94dc4a75", null ], + [ "jwt_encode_fp", "group__jwt__encode__grp.html#ga75068d73df905ce4c92af3e0769c91d4", null ], + [ "jwt_encode_str", "group__jwt__encode__grp.html#ga6c22c8123a9cf8bbcd7596562cd3ba98", null ], + [ "jwt_free_str", "group__jwt__encode__grp.html#gaa4a31fd1663c0338afaf79d0ee3a4849", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__encode__grp.map b/HEAD/group__jwt__encode__grp.map new file mode 100644 index 00000000..6c1c09c2 --- /dev/null +++ b/HEAD/group__jwt__encode__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__encode__grp.md5 b/HEAD/group__jwt__encode__grp.md5 new file mode 100644 index 00000000..20c492fb --- /dev/null +++ b/HEAD/group__jwt__encode__grp.md5 @@ -0,0 +1 @@ +fc0b0183d179310b6a5d477eaa55c609 \ No newline at end of file diff --git a/HEAD/group__jwt__encode__grp.png b/HEAD/group__jwt__encode__grp.png new file mode 100644 index 00000000..64599fa5 Binary files /dev/null and b/HEAD/group__jwt__encode__grp.png differ diff --git a/HEAD/group__jwt__grant__grp.html b/HEAD/group__jwt__grant__grp.html new file mode 100644 index 00000000..41bb6a8f --- /dev/null +++ b/HEAD/group__jwt__grant__grp.html @@ -0,0 +1,467 @@ + + + + + + + + +LibJWT: Grant Management + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Grant Management
+
+
+ +

These functions allow you to add, remove and retrieve grants from a JWT object. +More...

+
+Collaboration diagram for Grant Management:
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX const char * jwt_get_grant (jwt_t *jwt, const char *grant)
 Return the value of a string grant.
 
JWT_EX long jwt_get_grant_int (jwt_t *jwt, const char *grant)
 Return the value of an integer grant.
 
JWT_EX int jwt_get_grant_bool (jwt_t *jwt, const char *grant)
 Return the value of an boolean grant.
 
JWT_EX char * jwt_get_grants_json (jwt_t *jwt, const char *grant)
 Return the value of a grant as JSON encoded object string.
 
JWT_EX int jwt_add_grant (jwt_t *jwt, const char *grant, const char *val)
 Add a new string grant to this JWT object.
 
JWT_EX int jwt_add_grant_int (jwt_t *jwt, const char *grant, long val)
 Add a new integer grant to this JWT object.
 
JWT_EX int jwt_add_grant_bool (jwt_t *jwt, const char *grant, int val)
 Add a new boolean grant to this JWT object.
 
JWT_EX int jwt_add_grants_json (jwt_t *jwt, const char *json)
 Add grants from a JSON encoded object string.
 
JWT_EX int jwt_del_grants (jwt_t *jwt, const char *grant)
 Delete a grant from this JWT object.
 
+

Detailed Description

+

These functions allow you to add, remove and retrieve grants from a JWT object.

+

Function Documentation

+ +

◆ jwt_add_grant()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_grant (jwt_t * jwt,
const char * grant,
const char * val )
+
+ +

Add a new string grant to this JWT object.

+

Creates a new grant for this object. The string for grant and val are copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a grant that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to add.
valString containing the value to be saved for grant. Can be an empty string, but cannot be NULL.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for string based grants. If you wish to add integer grants, then use jwt_add_grant_int(). If you wish to add more complex grants (e.g. an array), then use jwt_add_grants_json().
+ +
+
+ +

◆ jwt_add_grant_bool()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_grant_bool (jwt_t * jwt,
const char * grant,
int val )
+
+ +

Add a new boolean grant to this JWT object.

+

Creates a new grant for this object. The string for grant is copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a grant that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to add.
valboolean containing the value to be saved for grant.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for boolean based grants. If you wish to add string grants, then use jwt_add_grant(). If you wish to add more complex grants (e.g. an array), then use jwt_add_grants_json().
+ +
+
+ +

◆ jwt_add_grant_int()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_grant_int (jwt_t * jwt,
const char * grant,
long val )
+
+ +

Add a new integer grant to this JWT object.

+

Creates a new grant for this object. The string for grant is copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a grant that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to add.
valint containing the value to be saved for grant.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for integer based grants. If you wish to add string grants, then use jwt_add_grant(). If you wish to add more complex grants (e.g. an array), then use jwt_add_grants_json().
+ +
+
+ +

◆ jwt_add_grants_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_add_grants_json (jwt_t * jwt,
const char * json )
+
+ +

Add grants from a JSON encoded object string.

+

Loads a grant from an existing JSON encoded object string. Overwrites existing grant. If grant is NULL, then the JSON encoded string is assumed to be a JSON hash of all grants being added and will be merged into the grant listing.

+
Parameters
+ + + +
jwtPointer to a JWT object.
jsonString containing a JSON encoded object of grants.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_del_grants()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_del_grants (jwt_t * jwt,
const char * grant )
+
+ +

Delete a grant from this JWT object.

+

Deletes the named grant from this object. It is not an error if there is no grant matching the passed name. If grant is NULL, then all grants are deleted from this JWT.

+
Parameters
+ + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to delete. If this is NULL, then all grants are deleted.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_get_grant()

+ +
+
+ + + + + + + + + + + +
JWT_EX const char * jwt_get_grant (jwt_t * jwt,
const char * grant )
+
+ +

Return the value of a string grant.

+

Returns the string value for a grant (e.g. "iss"). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns a string for the value, or NULL when not found.
+
Remarks
This will only return grants with JSON string values. Use jwt_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_grant_int() to get simple integer values.
+ +
+
+ +

◆ jwt_get_grant_bool()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_get_grant_bool (jwt_t * jwt,
const char * grant )
+
+ +

Return the value of an boolean grant.

+

Returns the int value for a grant (e.g. "exp"). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns a boolean for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return grants with JSON boolean values. Use jwt_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_grant() to get string values.
+ +
+
+ +

◆ jwt_get_grant_int()

+ +
+
+ + + + + + + + + + + +
JWT_EX long jwt_get_grant_int (jwt_t * jwt,
const char * grant )
+
+ +

Return the value of an integer grant.

+

Returns the int value for a grant (e.g. "exp"). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns an int for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return grants with JSON integer values. Use jwt_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_grant() to get string values.
+ +
+
+ +

◆ jwt_get_grants_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX char * jwt_get_grants_json (jwt_t * jwt,
const char * grant )
+
+ +

Return the value of a grant as JSON encoded object string.

+

Returns the JSON encoded string value for a grant (e.g. "iss"). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
grantString containing the name of the grant to return a value for. If this is NULL, all grants will be returned as a JSON encoded hash.
+
+
+
Returns
Returns a string for the value, or NULL when not found. The returned string must be freed by the caller.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__grant__grp.js b/HEAD/group__jwt__grant__grp.js new file mode 100644 index 00000000..ca0aadc8 --- /dev/null +++ b/HEAD/group__jwt__grant__grp.js @@ -0,0 +1,12 @@ +var group__jwt__grant__grp = +[ + [ "jwt_add_grant", "group__jwt__grant__grp.html#ga391fe3800ff1732963c2378be03ba6c5", null ], + [ "jwt_add_grant_bool", "group__jwt__grant__grp.html#ga121c420f2260c390766cb876457e08a8", null ], + [ "jwt_add_grant_int", "group__jwt__grant__grp.html#ga131263c6fef541091502a6643d821a89", null ], + [ "jwt_add_grants_json", "group__jwt__grant__grp.html#ga8cea5a3568a484409da924b0e1e9fa2b", null ], + [ "jwt_del_grants", "group__jwt__grant__grp.html#ga60adda362cb83653d5acd64643028148", null ], + [ "jwt_get_grant", "group__jwt__grant__grp.html#ga842126cace5bc8dd002061492c3cf324", null ], + [ "jwt_get_grant_bool", "group__jwt__grant__grp.html#gac26cd963fd3acab4abf19fb8fd3fa2f3", null ], + [ "jwt_get_grant_int", "group__jwt__grant__grp.html#ga2d501d6d45a9c07cd206ede06d12b4c2", null ], + [ "jwt_get_grants_json", "group__jwt__grant__grp.html#gad46782d1f6217651a88129329a7b2cd8", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__grant__grp.map b/HEAD/group__jwt__grant__grp.map new file mode 100644 index 00000000..62e570ec --- /dev/null +++ b/HEAD/group__jwt__grant__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__grant__grp.md5 b/HEAD/group__jwt__grant__grp.md5 new file mode 100644 index 00000000..e4676cd7 --- /dev/null +++ b/HEAD/group__jwt__grant__grp.md5 @@ -0,0 +1 @@ +b24832faa3dd62e579e2d3f4ec529a64 \ No newline at end of file diff --git a/HEAD/group__jwt__grant__grp.png b/HEAD/group__jwt__grant__grp.png new file mode 100644 index 00000000..beabf17f Binary files /dev/null and b/HEAD/group__jwt__grant__grp.png differ diff --git a/HEAD/group__jwt__grp.html b/HEAD/group__jwt__grp.html new file mode 100644 index 00000000..a207ae36 --- /dev/null +++ b/HEAD/group__jwt__grp.html @@ -0,0 +1,150 @@ + + + + + + + + +LibJWT: JSON Web Token + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
JSON Web Token
+
+
+
+Collaboration diagram for JSON Web Token:
+
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Topics

 Object Creation
 Functions used to create and destroy JWT objects.
 
 Token Verification
 Functions used to decode and verify signatures for a JWT.
 
 Grant Management
 These functions allow you to add, remove and retrieve grants from a JWT object.
 
 Header Hanagement
 These functions allow you to add, remove and retrieve headers from a JWT object.
 
 Encoding and Output
 Functions for encoding a valid JWT optionally (but preferably) using JWA operation such as sigining or encryption.
 
 Algorithm Management
 Set and check algorithms and algorithm specific values.
 
 Validation Functions
 These functions allow you to define requirements for JWT validation.
 
+

Detailed Description

+
+
+ + + + + diff --git a/HEAD/group__jwt__grp.js b/HEAD/group__jwt__grp.js new file mode 100644 index 00000000..c2ffaf40 --- /dev/null +++ b/HEAD/group__jwt__grp.js @@ -0,0 +1,10 @@ +var group__jwt__grp = +[ + [ "Object Creation", "group__jwt__core__grp.html", "group__jwt__core__grp" ], + [ "Token Verification", "group__jwt__verify__grp.html", "group__jwt__verify__grp" ], + [ "Grant Management", "group__jwt__grant__grp.html", "group__jwt__grant__grp" ], + [ "Header Hanagement", "group__jwt__header__grp.html", "group__jwt__header__grp" ], + [ "Encoding and Output", "group__jwt__encode__grp.html", "group__jwt__encode__grp" ], + [ "Algorithm Management", "group__jwt__alg__grp.html", "group__jwt__alg__grp" ], + [ "Validation Functions", "group__jwt__valid__grp.html", "group__jwt__valid__grp" ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__grp.map b/HEAD/group__jwt__grp.map new file mode 100644 index 00000000..dcfae1b6 --- /dev/null +++ b/HEAD/group__jwt__grp.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/HEAD/group__jwt__grp.md5 b/HEAD/group__jwt__grp.md5 new file mode 100644 index 00000000..0eb3cf0a --- /dev/null +++ b/HEAD/group__jwt__grp.md5 @@ -0,0 +1 @@ +f2155f355e8e90a293e3780697c2433d \ No newline at end of file diff --git a/HEAD/group__jwt__grp.png b/HEAD/group__jwt__grp.png new file mode 100644 index 00000000..eef57e85 Binary files /dev/null and b/HEAD/group__jwt__grp.png differ diff --git a/HEAD/group__jwt__header__grp.html b/HEAD/group__jwt__header__grp.html new file mode 100644 index 00000000..41cbfc52 --- /dev/null +++ b/HEAD/group__jwt__header__grp.html @@ -0,0 +1,467 @@ + + + + + + + + +LibJWT: Header Hanagement + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Header Hanagement
+
+
+ +

These functions allow you to add, remove and retrieve headers from a JWT object. +More...

+
+Collaboration diagram for Header Hanagement:
+
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX const char * jwt_get_header (jwt_t *jwt, const char *header)
 Return the value of a string header.
 
JWT_EX long jwt_get_header_int (jwt_t *jwt, const char *header)
 Return the value of an integer header.
 
JWT_EX int jwt_get_header_bool (jwt_t *jwt, const char *header)
 Return the value of an boolean header.
 
JWT_EX char * jwt_get_headers_json (jwt_t *jwt, const char *header)
 Return the value of a header as JSON encoded object string.
 
JWT_EX int jwt_add_header (jwt_t *jwt, const char *header, const char *val)
 Add a new string header to this JWT object.
 
JWT_EX int jwt_add_header_int (jwt_t *jwt, const char *header, long val)
 Add a new integer header to this JWT object.
 
JWT_EX int jwt_add_header_bool (jwt_t *jwt, const char *header, int val)
 Add a new boolean header to this JWT object.
 
JWT_EX int jwt_add_headers_json (jwt_t *jwt, const char *json)
 Add headers from a JSON encoded object string.
 
JWT_EX int jwt_del_headers (jwt_t *jwt, const char *header)
 Delete a header from this JWT object.
 
+

Detailed Description

+

These functions allow you to add, remove and retrieve headers from a JWT object.

+

Function Documentation

+ +

◆ jwt_add_header()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_header (jwt_t * jwt,
const char * header,
const char * val )
+
+ +

Add a new string header to this JWT object.

+

Creates a new header for this object. The string for header and val are copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a header that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
headerString containing the name of the header to add.
valString containing the value to be saved for header. Can be an empty string, but cannot be NULL.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for string based headers. If you wish to add integer headers, then use jwt_add_header_int(). If you wish to add more complex headers (e.g. an array), then use jwt_add_headers_json().
+ +
+
+ +

◆ jwt_add_header_bool()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_header_bool (jwt_t * jwt,
const char * header,
int val )
+
+ +

Add a new boolean header to this JWT object.

+

Creates a new header for this object. The string for header is copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a header that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
headerString containing the name of the header to add.
valboolean containing the value to be saved for header.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for boolean based headers. If you wish to add string headers, then use jwt_add_header(). If you wish to add more complex headers (e.g. an array), then use jwt_add_headers_json().
+ +
+
+ +

◆ jwt_add_header_int()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_add_header_int (jwt_t * jwt,
const char * header,
long val )
+
+ +

Add a new integer header to this JWT object.

+

Creates a new header for this object. The string for header is copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a header that already exists.

+
Parameters
+ + + + +
jwtPointer to a JWT object.
headerString containing the name of the header to add.
valint containing the value to be saved for header.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for integer based headers. If you wish to add string headers, then use jwt_add_header(). If you wish to add more complex headers (e.g. an array), then use jwt_add_headers_json().
+ +
+
+ +

◆ jwt_add_headers_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_add_headers_json (jwt_t * jwt,
const char * json )
+
+ +

Add headers from a JSON encoded object string.

+

Loads a header from an existing JSON encoded object string. Overwrites existing header. If header is NULL, then the JSON encoded string is assumed to be a JSON hash of all headers being added and will be merged into the header listing.

+
Parameters
+ + + +
jwtPointer to a JWT object.
jsonString containing a JSON encoded object of headers.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_del_headers()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_del_headers (jwt_t * jwt,
const char * header )
+
+ +

Delete a header from this JWT object.

+

Deletes the named header from this object. It is not an error if there is no header matching the passed name. If header is NULL, then all headers are deleted from this JWT.

+
Parameters
+ + + +
jwtPointer to a JWT object.
headerString containing the name of the header to delete. If this is NULL, then all headers are deleted.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_get_header()

+ +
+
+ + + + + + + + + + + +
JWT_EX const char * jwt_get_header (jwt_t * jwt,
const char * header )
+
+ +

Return the value of a string header.

+

Returns the string value for a header (e.g. ""). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
headerString containing the name of the header to return a value for.
+
+
+
Returns
Returns a string for the value, or NULL when not found.
+
Remarks
This will only return headers with JSON string values. Use jwt_get_header_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_header_int() to get simple integer values.
+ +
+
+ +

◆ jwt_get_header_bool()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_get_header_bool (jwt_t * jwt,
const char * header )
+
+ +

Return the value of an boolean header.

+

Returns the int value for a header (e.g. ""). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
headerString containing the name of the header to return a value for.
+
+
+
Returns
Returns a boolean for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return headers with JSON boolean values. Use jwt_get_header_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_header() to get string values.
+ +
+
+ +

◆ jwt_get_header_int()

+ +
+
+ + + + + + + + + + + +
JWT_EX long jwt_get_header_int (jwt_t * jwt,
const char * header )
+
+ +

Return the value of an integer header.

+

Returns the int value for a header (e.g. ""). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
headerString containing the name of the header to return a value for.
+
+
+
Returns
Returns an int for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return headers with JSON integer values. Use jwt_get_header_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_get_header() to get string values.
+ +
+
+ +

◆ jwt_get_headers_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX char * jwt_get_headers_json (jwt_t * jwt,
const char * header )
+
+ +

Return the value of a header as JSON encoded object string.

+

Returns the JSON encoded string value for a header (e.g. ""). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwtPointer to a JWT object.
headerString containing the name of the header to return a value for. If this is NULL, all headers will be returned as a JSON encoded hash.
+
+
+
Returns
Returns a string for the value, or NULL when not found. The returned string must be freed by the caller.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__header__grp.js b/HEAD/group__jwt__header__grp.js new file mode 100644 index 00000000..209b81d3 --- /dev/null +++ b/HEAD/group__jwt__header__grp.js @@ -0,0 +1,12 @@ +var group__jwt__header__grp = +[ + [ "jwt_add_header", "group__jwt__header__grp.html#gab491db511b55567d85fd0e6eaed9fd3b", null ], + [ "jwt_add_header_bool", "group__jwt__header__grp.html#gaec63a7fd38567b56571548d78a323dcc", null ], + [ "jwt_add_header_int", "group__jwt__header__grp.html#gae44ee81cba151fe398c1c2cd0ef54c11", null ], + [ "jwt_add_headers_json", "group__jwt__header__grp.html#gaa67f2e193581d7bc1f2d04e21cca257b", null ], + [ "jwt_del_headers", "group__jwt__header__grp.html#gab8b25d007b7d36f5633b3967f538c4a0", null ], + [ "jwt_get_header", "group__jwt__header__grp.html#gaed98c372e51147d9976e1818840fa54e", null ], + [ "jwt_get_header_bool", "group__jwt__header__grp.html#gab15733eb16e51d6484ed787446ed7f47", null ], + [ "jwt_get_header_int", "group__jwt__header__grp.html#ga516a0be7adfede913713447e5a2837d6", null ], + [ "jwt_get_headers_json", "group__jwt__header__grp.html#ga3143090567d2e98ec2949a1e2850cbbf", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__header__grp.map b/HEAD/group__jwt__header__grp.map new file mode 100644 index 00000000..0dbf2a9c --- /dev/null +++ b/HEAD/group__jwt__header__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__header__grp.md5 b/HEAD/group__jwt__header__grp.md5 new file mode 100644 index 00000000..0c67272d --- /dev/null +++ b/HEAD/group__jwt__header__grp.md5 @@ -0,0 +1 @@ +d1e31862e4bb915e1638c67515484565 \ No newline at end of file diff --git a/HEAD/group__jwt__header__grp.png b/HEAD/group__jwt__header__grp.png new file mode 100644 index 00000000..e07875c0 Binary files /dev/null and b/HEAD/group__jwt__header__grp.png differ diff --git a/HEAD/group__jwt__memory__grp.html b/HEAD/group__jwt__memory__grp.html new file mode 100644 index 00000000..0be8358e --- /dev/null +++ b/HEAD/group__jwt__memory__grp.html @@ -0,0 +1,278 @@ + + + + + + + + +LibJWT: Memory Handlers + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Memory Handlers
+
+
+ +

These functions allow you to get or set memory allocation functions. +More...

+
+Collaboration diagram for Memory Handlers:
+
+
+ + + + +
+ + + + + + + + + + + +

+Typedefs

typedef void *(* jwt_malloc_t) (size_t)
 Prototype for malloc(3)
 
typedef void *(* jwt_realloc_t) (void *, size_t)
 Prototype for realloc(3)
 
typedef void(* jwt_free_t) (void *)
 Prototype for free(3)
 
+ + + + + + + +

+Functions

JWT_EX int jwt_set_alloc (jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree)
 Set functions to be used for allocating and freeing memory.
 
JWT_EX void jwt_get_alloc (jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree)
 Get functions used for allocating and freeing memory.
 
+

Detailed Description

+

These functions allow you to get or set memory allocation functions.

+

Typedef Documentation

+ +

◆ jwt_free_t

+ +
+
+ + + + +
typedef void(* jwt_free_t) (void *)
+
+ +

Prototype for free(3)

+ +

Definition at line 262 of file jwt.h.

+ +
+
+ +

◆ jwt_malloc_t

+ +
+
+ + + + +
typedef void *(* jwt_malloc_t) (size_t)
+
+ +

Prototype for malloc(3)

+ +

Definition at line 252 of file jwt.h.

+ +
+
+ +

◆ jwt_realloc_t

+ +
+
+ + + + +
typedef void *(* jwt_realloc_t) (void *, size_t)
+
+ +

Prototype for realloc(3)

+ +

Definition at line 257 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwt_get_alloc()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX void jwt_get_alloc (jwt_malloc_t * pmalloc,
jwt_realloc_t * prealloc,
jwt_free_t * pfree )
+
+ +

Get functions used for allocating and freeing memory.

+
Parameters
+ + + + +
pmallocPointer to malloc function output variable, or NULL
preallocPointer to realloc function output variable, or NULL
pfreePointer to free function output variable, or NULL
+
+
+ +
+
+ +

◆ jwt_set_alloc()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_set_alloc (jwt_malloc_t pmalloc,
jwt_realloc_t prealloc,
jwt_free_t pfree )
+
+ +

Set functions to be used for allocating and freeing memory.

+

By default, LibJWT uses malloc, realloc, and free for memory management. This function allows the user of the library to specify its own memory management functions. This is especially useful on Windows where mismatches in runtimes across DLLs can cause problems.

+

The caller can specify either a valid function pointer for any of the parameters or NULL to use the corresponding default allocator function.

+

Note that this function will also set the memory allocator for the Jansson library.

+
Parameters
+ + + + +
pmallocThe function to use for allocating memory or NULL to use malloc
preallocThe function to use for reallocating memory or NULL to use realloc
pfreeThe function to use for freeing memory or NULL to use free
+
+
+
Returns
0 on success or errno otherwise.
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__memory__grp.js b/HEAD/group__jwt__memory__grp.js new file mode 100644 index 00000000..010b93e3 --- /dev/null +++ b/HEAD/group__jwt__memory__grp.js @@ -0,0 +1,8 @@ +var group__jwt__memory__grp = +[ + [ "jwt_free_t", "group__jwt__memory__grp.html#gad3b3fc88482616b2883b786d0700c377", null ], + [ "jwt_malloc_t", "group__jwt__memory__grp.html#gae64b1a91c7e44845d2422f5a6bfa7972", null ], + [ "jwt_realloc_t", "group__jwt__memory__grp.html#gaee904814d9c9266c68d2abff08fbc5af", null ], + [ "jwt_get_alloc", "group__jwt__memory__grp.html#gad4c9b239d50fef715f78fcdc0084a289", null ], + [ "jwt_set_alloc", "group__jwt__memory__grp.html#ga6fed66d8d3c2fe378fdbf82c309ad61b", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__memory__grp.map b/HEAD/group__jwt__memory__grp.map new file mode 100644 index 00000000..fef7f696 --- /dev/null +++ b/HEAD/group__jwt__memory__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__memory__grp.md5 b/HEAD/group__jwt__memory__grp.md5 new file mode 100644 index 00000000..5d2c866f --- /dev/null +++ b/HEAD/group__jwt__memory__grp.md5 @@ -0,0 +1 @@ +df1a62c00d3f94d702ae864fea9b58d3 \ No newline at end of file diff --git a/HEAD/group__jwt__memory__grp.png b/HEAD/group__jwt__memory__grp.png new file mode 100644 index 00000000..992965e3 Binary files /dev/null and b/HEAD/group__jwt__memory__grp.png differ diff --git a/HEAD/group__jwt__valid__grp.html b/HEAD/group__jwt__valid__grp.html new file mode 100644 index 00000000..cb244256 --- /dev/null +++ b/HEAD/group__jwt__valid__grp.html @@ -0,0 +1,926 @@ + + + + + + + + +LibJWT: Validation Functions + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Validation Functions
+
+
+ +

These functions allow you to define requirements for JWT validation. +More...

+
+Collaboration diagram for Validation Functions:
+
+
+ + + + +
+ + + + + +

+Typedefs

typedef struct jwt_valid jwt_valid_t
 Opaque JWT Validation object.
 
+ + + + +

+Enumerations

enum  jwt_valid_exception_t {
+  JWT_VALIDATION_SUCCESS +, JWT_VALIDATION_ERROR +, JWT_VALIDATION_ALG_MISMATCH +, JWT_VALIDATION_EXPIRED +,
+  JWT_VALIDATION_TOO_NEW +, JWT_VALIDATION_ISS_MISMATCH +, JWT_VALIDATION_SUB_MISMATCH +, JWT_VALIDATION_AUD_MISMATCH +,
+  JWT_VALIDATION_GRANT_MISSING +, JWT_VALIDATION_GRANT_MISMATCH +
+ }
 Validation exception types for jwt_t objects. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX jwt_valid_exception_t jwt_validate (jwt_t *jwt, jwt_valid_t *jwt_valid)
 Validate a JWT object with a validation object.
 
JWT_EX int jwt_valid_new (jwt_valid_t **jwt_valid, jwt_alg_t alg)
 Allocate a new, JWT validation object.
 
JWT_EX void jwt_valid_free (jwt_valid_t *jwt_valid)
 Free a JWT validation object and any other resources it is using.
 
JWT_EX jwt_valid_exception_t jwt_valid_get_status (jwt_valid_t *jwt_valid)
 Return the status string for the validation object.
 
JWT_EX time_t jwt_valid_get_nbf_leeway (jwt_valid_t *jwt_valid)
 Return the nbf_leeway value set.
 
JWT_EX time_t jwt_valid_get_exp_leeway (jwt_valid_t *jwt_valid)
 Return the exp_leeway value set.
 
JWT_EX int jwt_valid_add_grant (jwt_valid_t *jwt_valid, const char *grant, const char *val)
 Add a new string grant requirement to this JWT validation object.
 
JWT_EX const char * jwt_valid_get_grant (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of a string required grant.
 
JWT_EX int jwt_valid_add_grant_int (jwt_valid_t *jwt_valid, const char *grant, long val)
 Add a new integer grant requirement to this JWT validation object.
 
JWT_EX long jwt_valid_get_grant_int (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of an integer required grant.
 
JWT_EX int jwt_valid_add_grant_bool (jwt_valid_t *jwt_valid, const char *grant, int val)
 Add a new boolean required grant to this JWT validation object.
 
JWT_EX int jwt_valid_get_grant_bool (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of an boolean required grant.
 
JWT_EX int jwt_valid_add_grants_json (jwt_valid_t *jwt_valid, const char *json)
 Add required grants from a JSON encoded object string.
 
JWT_EX char * jwt_valid_get_grants_json (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of a grant as JSON encoded object string.
 
JWT_EX int jwt_valid_del_grants (jwt_valid_t *jwt_valid, const char *grant)
 Delete a grant from this JWT object.
 
JWT_EX int jwt_valid_set_now (jwt_valid_t *jwt_valid, const time_t now)
 Set the time for which expires and not-before claims should be evaluated.
 
JWT_EX int jwt_valid_set_nbf_leeway (jwt_valid_t *jwt_valid, const time_t nbf_leeway)
 Set the nbf_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.5.
 
JWT_EX int jwt_valid_set_exp_leeway (jwt_valid_t *jwt_valid, const time_t exp_leeway)
 Set the exp_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4.
 
JWT_EX int jwt_valid_set_headers (jwt_valid_t *jwt_valid, int hdr)
 Set validation for replicated claims in headers.
 
JWT_EX char * jwt_exception_str (unsigned int exceptions)
 Parses exceptions and returns a comma delimited and human-readable string.
 
+

Detailed Description

+

These functions allow you to define requirements for JWT validation.

+

The most basic validation is that the JWT uses the expected algorithm.

+

When replicating claims in header (usually for encrypted JWT), validation tests that they match claims in the body (iss, sub, aud).

+

Time-based claims can also be validated (nbf, exp).

+

Finally, validation can test that claims be present and have certain value.

+

Typedef Documentation

+ +

◆ jwt_valid_t

+ +
+
+ + + + +
typedef struct jwt_valid jwt_valid_t
+
+ +

Opaque JWT Validation object.

+

Used in the JWT validation functions.

+ +

Definition at line 75 of file jwt.h.

+ +
+
+

Enumeration Type Documentation

+ +

◆ jwt_valid_exception_t

+ +
+
+ + + + +
enum jwt_valid_exception_t
+
+ +

Validation exception types for jwt_t objects.

+

These are bitwise values that allow you to check for exceptions when using the jwt_valid_t

+
Todo

RFC-7519 Sec 4.1.6 "iat" Issued At

+

RFC-7519 Sec 4.1.7 "jti" JWT ID

+
+ + + + + + + + + + + +
Enumerator
JWT_VALIDATION_SUCCESS 

Validation succeeded
+

+
JWT_VALIDATION_ERROR 

General failures
+

+
JWT_VALIDATION_ALG_MISMATCH 

RFC-7518 Sec 3.1 "alg" Algorithm
+

+
JWT_VALIDATION_EXPIRED 

RFC-7519 Sec 4.1.4 "exp" Expired

+
JWT_VALIDATION_TOO_NEW 

RFC-7519 Sec 4.1.5 "nbf" Not Before
+

+
JWT_VALIDATION_ISS_MISMATCH 

RFC-7519 Sec 4.1.1 "iss" Issuer
+

+
JWT_VALIDATION_SUB_MISMATCH 

RFC-7519 Sec 4.1.2 "sub" Subject

+
JWT_VALIDATION_AUD_MISMATCH 

RFC-7519 Sec 4.1.3 "aud" Audience
+

+
JWT_VALIDATION_GRANT_MISSING 

User-defined Grant missing
+

+
JWT_VALIDATION_GRANT_MISMATCH 

User-defined Grant mismatch
+

+
+ +

Definition at line 236 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwt_exception_str()

+ +
+
+ + + + + + + +
JWT_EX char * jwt_exception_str (unsigned int exceptions)
+
+ +

Parses exceptions and returns a comma delimited and human-readable string.

+

The returned string must be freed by the caller. If you changed the allocation method using jwt_set_alloc, then you must use jwt_free_str() to free the memory.

+
Remarks
This string is currently en-US ASCII only. Language support will come in the future.
+
Parameters
+ + +
exceptionsInteger containing the exception flags.
+
+
+
Returns
A null terminated string on success, NULL on error with errno set appropriately.
+ +
+
+ +

◆ jwt_valid_add_grant()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_valid_add_grant (jwt_valid_t * jwt_valid,
const char * grant,
const char * val )
+
+ +

Add a new string grant requirement to this JWT validation object.

+
Parameters
+ + + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to add.
valString containing the value to be saved for grant. Can be an empty string, but cannot be NULL.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+

Note, this only allows for string based grants. If you wish to add integer grants, then use jwt_valid_add_grant_int(). If you wish to add more complex grants (e.g. an array), then use jwt_valid_add_grants_json().

+ +
+
+ +

◆ jwt_valid_add_grant_bool()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_valid_add_grant_bool (jwt_valid_t * jwt_valid,
const char * grant,
int val )
+
+ +

Add a new boolean required grant to this JWT validation object.

+

Creates a new grant for this object. The string for grant is copied internally, so do not require that the pointer or string remain valid for the lifetime of this object. It is an error if you try to add a grant that already exists.

+
Parameters
+ + + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to add.
valboolean containing the value to be saved for grant.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for boolean based grants. If you wish to add string grants, then use jwt_valid_add_grant(). If you wish to add more complex grants (e.g. an array), then use jwt_valid_add_grants_json().
+ +
+
+ +

◆ jwt_valid_add_grant_int()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_valid_add_grant_int (jwt_valid_t * jwt_valid,
const char * grant,
long val )
+
+ +

Add a new integer grant requirement to this JWT validation object.

+
Parameters
+ + + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to add.
valint containing the value to be saved for grant.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
This only allows for integer based grants. If you wish to add string grants, then use jwt_valid_add_grant(). If you wish to add more complex grants (e.g. an array), then use jwt_valid_add_grants_json().
+ +
+
+ +

◆ jwt_valid_add_grants_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_add_grants_json (jwt_valid_t * jwt_valid,
const char * json )
+
+ +

Add required grants from a JSON encoded object string.

+

Loads a grant from an existing JSON encoded object string. Overwrites existing grant.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
jsonString containing a JSON encoded object of grants.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_valid_del_grants()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_del_grants (jwt_valid_t * jwt_valid,
const char * grant )
+
+ +

Delete a grant from this JWT object.

+

Deletes the named grant from this object. It is not an error if there is no grant matching the passed name. If grant is NULL, then all grants are deleted from this JWT.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to delete. If this is NULL, then all grants are deleted.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_valid_free()

+ +
+
+ + + + + + + +
JWT_EX void jwt_valid_free (jwt_valid_t * jwt_valid)
+
+ +

Free a JWT validation object and any other resources it is using.

+

After calling, the JWT validation object referenced will no longer be valid and its memory will be freed.

+
Parameters
+ + +
jwt_validPointer to a JWT validation object previously created with jwt_valid_new().
+
+
+ +
+
+ +

◆ jwt_valid_get_exp_leeway()

+ +
+
+ + + + + + + +
JWT_EX time_t jwt_valid_get_exp_leeway (jwt_valid_t * jwt_valid)
+
+ +

Return the exp_leeway value set.

+
Parameters
+ + +
jwt_validPointer to a JWT validation object.
+
+
+
Returns
Returns current exp_leeway value
+ +
+
+ +

◆ jwt_valid_get_grant()

+ +
+
+ + + + + + + + + + + +
JWT_EX const char * jwt_valid_get_grant (jwt_valid_t * jwt_valid,
const char * grant )
+
+ +

Return the value of a string required grant.

+

Returns the string value for a grant (e.g. "iss"). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns a string for the value, or NULL when not found.
+

Note, this will only return grants with JSON string values. Use jwt_valid_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_valid_get_grant_int() to get simple integer values.

+ +
+
+ +

◆ jwt_valid_get_grant_bool()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_get_grant_bool (jwt_valid_t * jwt_valid,
const char * grant )
+
+ +

Return the value of an boolean required grant.

+

Returns the int value for a grant (e.g. "exp"). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns a boolean for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return grants with JSON boolean values. Use jwt_valid_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_valid_get_grant() to get string values.
+ +
+
+ +

◆ jwt_valid_get_grant_int()

+ +
+
+ + + + + + + + + + + +
JWT_EX long jwt_valid_get_grant_int (jwt_valid_t * jwt_valid,
const char * grant )
+
+ +

Return the value of an integer required grant.

+

Returns the int value for a grant (e.g. "exp"). If it does not exist, 0 will be returned.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns an int for the value. Sets errno to ENOENT when not found.
+
Remarks
This will only return grants with JSON integer values. Use jwt_valid_get_grants_json() to get the JSON representation of more complex values (e.g. arrays) or use jwt_valid_get_grant() to get string values.
+ +
+
+ +

◆ jwt_valid_get_grants_json()

+ +
+
+ + + + + + + + + + + +
JWT_EX char * jwt_valid_get_grants_json (jwt_valid_t * jwt_valid,
const char * grant )
+
+ +

Return the value of a grant as JSON encoded object string.

+

Returns the JSON encoded string value for a grant (e.g. "iss"). If it does not exist, NULL will be returned.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
grantString containing the name of the grant to return a value for.
+
+
+
Returns
Returns a string for the value, or NULL when not found. The returned string must be freed by the caller.
+ +
+
+ +

◆ jwt_valid_get_nbf_leeway()

+ +
+
+ + + + + + + +
JWT_EX time_t jwt_valid_get_nbf_leeway (jwt_valid_t * jwt_valid)
+
+ +

Return the nbf_leeway value set.

+
Parameters
+ + +
jwt_validPointer to a JWT validation object.
+
+
+
Returns
Returns current nbf_leeway value
+ +
+
+ +

◆ jwt_valid_get_status()

+ +
+
+ + + + + + + +
JWT_EX jwt_valid_exception_t jwt_valid_get_status (jwt_valid_t * jwt_valid)
+
+ +

Return the status string for the validation object.

+

The status of validation object is primarily for describing the reason jwt_validate() failed.

+
Parameters
+ + +
jwt_validPointer to a JWT validation object.
+
+
+
Returns
Returns current validation status as a bitwise OR of possible errors, or 0 if validation is currently successful.
+ +
+
+ +

◆ jwt_valid_new()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_new (jwt_valid_t ** jwt_valid,
jwt_alg_t alg )
+
+ +

Allocate a new, JWT validation object.

+

This is used to create a new object for a JWT validation. After you have finished with the object, use jwt_valid_free() to clean up the memory used by it.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object pointer. Will be allocated on success.
algA valid jwt_alg_t specifier.
+
+
+
Returns
0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_valid_set_exp_leeway()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_set_exp_leeway (jwt_valid_t * jwt_valid,
const time_t exp_leeway )
+
+ +

Set the exp_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
exp_leewayleeway for exp value.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_valid_set_headers()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_set_headers (jwt_valid_t * jwt_valid,
int hdr )
+
+ +

Set validation for replicated claims in headers.

+

When set, validation tests for presence of iss, sub, aud in jwt headers and tests match for same claims in body.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
hdrWhen true, test header claims
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
jwt_validate() will not fail if iss, sub, aud are not present in JWT header or body.
+ +
+
+ +

◆ jwt_valid_set_nbf_leeway()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_set_nbf_leeway (jwt_valid_t * jwt_valid,
const time_t nbf_leeway )
+
+ +

Set the nbf_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.5.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
nbf_leewayleeway for nbf value.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+ +
+
+ +

◆ jwt_valid_set_now()

+ +
+
+ + + + + + + + + + + +
JWT_EX int jwt_valid_set_now (jwt_valid_t * jwt_valid,
const time_t now )
+
+ +

Set the time for which expires and not-before claims should be evaluated.

+
Parameters
+ + + +
jwt_validPointer to a JWT validation object.
nowTime to use when considering nbf and exp claims.
+
+
+
Returns
Returns 0 on success, valid errno otherwise.
+
Remarks
jwt_validate() will not fail based on time if no expires or not-before claims exist in a JWT object.
+ +
+
+ +

◆ jwt_validate()

+ +
+
+ + + + + + + + + + + +
JWT_EX jwt_valid_exception_t jwt_validate (jwt_t * jwt,
jwt_valid_t * jwt_valid )
+
+ +

Validate a JWT object with a validation object.

+
Parameters
+ + + +
jwtPointer to a JWT object.
jwt_validPointer to a JWT validation object.
+
+
+
Returns
bitwide OR if possible validation errors or 0 on success
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__valid__grp.js b/HEAD/group__jwt__valid__grp.js new file mode 100644 index 00000000..f555e22e --- /dev/null +++ b/HEAD/group__jwt__valid__grp.js @@ -0,0 +1,36 @@ +var group__jwt__valid__grp = +[ + [ "jwt_valid_t", "group__jwt__valid__grp.html#gac413377fbfc11671e8a8a66f45693e5d", null ], + [ "jwt_valid_exception_t", "group__jwt__valid__grp.html#ga47ee94f9c08ff581f78590bfe024f6e4", [ + [ "JWT_VALIDATION_SUCCESS", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a94bb9121f597e706e89322b0f9a7330b", null ], + [ "JWT_VALIDATION_ERROR", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4ad2e58b1f8a8bc39518b1c973fa99ee6e", null ], + [ "JWT_VALIDATION_ALG_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4abf0dc5dd94b521a118485a9522cd8cea", null ], + [ "JWT_VALIDATION_EXPIRED", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a698be61a7f4bcf0dfd9894e1c6296e0b", null ], + [ "JWT_VALIDATION_TOO_NEW", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a685c5270c214bf2484b65376e4b7459b", null ], + [ "JWT_VALIDATION_ISS_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a0dde2793247cd11fbf017212d8fd605f", null ], + [ "JWT_VALIDATION_SUB_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4ac8b2989c55deb3bdad631c61f1ed304d", null ], + [ "JWT_VALIDATION_AUD_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4acb9d53e3cc20a39c0827d77a071271e6", null ], + [ "JWT_VALIDATION_GRANT_MISSING", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a94eb7551ec626004a55798ecbd563d38", null ], + [ "JWT_VALIDATION_GRANT_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a5b1db073c57082b557592b7115a8e363", null ] + ] ], + [ "jwt_exception_str", "group__jwt__valid__grp.html#ga62aa101df260ec31133eeb4c4c52b80a", null ], + [ "jwt_valid_add_grant", "group__jwt__valid__grp.html#gaf314c644fea06547647958483759ceac", null ], + [ "jwt_valid_add_grant_bool", "group__jwt__valid__grp.html#ga8900a467e4176b1fa9b622a2705269ee", null ], + [ "jwt_valid_add_grant_int", "group__jwt__valid__grp.html#gabacde09b87fca8b096d291163f4c4a5c", null ], + [ "jwt_valid_add_grants_json", "group__jwt__valid__grp.html#gab75b56ce400f582ace10a4e524635286", null ], + [ "jwt_valid_del_grants", "group__jwt__valid__grp.html#gaf9f8b1dbe950cf2fc9a8200cf749a442", null ], + [ "jwt_valid_free", "group__jwt__valid__grp.html#ga728df4b06a8265eaaea237641185c76f", null ], + [ "jwt_valid_get_exp_leeway", "group__jwt__valid__grp.html#gaeb53cb3059ef0a6969f9d401e76958c2", null ], + [ "jwt_valid_get_grant", "group__jwt__valid__grp.html#ga7f2277d29179a01928c0ebe4fbef1a7c", null ], + [ "jwt_valid_get_grant_bool", "group__jwt__valid__grp.html#ga1bcf672c544bd4d2ebb656a79ce90f69", null ], + [ "jwt_valid_get_grant_int", "group__jwt__valid__grp.html#ga1af73c88e51e80f456e10cdd43bcf2f1", null ], + [ "jwt_valid_get_grants_json", "group__jwt__valid__grp.html#ga19a0badfa97417865fe6053c8d9c076e", null ], + [ "jwt_valid_get_nbf_leeway", "group__jwt__valid__grp.html#gaea88716bb3596c459da61677e8184662", null ], + [ "jwt_valid_get_status", "group__jwt__valid__grp.html#gaffc50a84a9914aa74f233054fd243a61", null ], + [ "jwt_valid_new", "group__jwt__valid__grp.html#ga88d954bf262717532dba3f8d9d29c8af", null ], + [ "jwt_valid_set_exp_leeway", "group__jwt__valid__grp.html#ga7d4a3188a889ae2a0837aec6f358cde5", null ], + [ "jwt_valid_set_headers", "group__jwt__valid__grp.html#gaf12cd57921f54714ec74ced386a80981", null ], + [ "jwt_valid_set_nbf_leeway", "group__jwt__valid__grp.html#gae0319eaec4c9a1e706b85aa365ada20e", null ], + [ "jwt_valid_set_now", "group__jwt__valid__grp.html#ga8e5fbc676ebc0a0286bc70b9d062d53e", null ], + [ "jwt_validate", "group__jwt__valid__grp.html#ga9ce197165c625f967f889212ca9fab86", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__valid__grp.map b/HEAD/group__jwt__valid__grp.map new file mode 100644 index 00000000..bc9e29e8 --- /dev/null +++ b/HEAD/group__jwt__valid__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__valid__grp.md5 b/HEAD/group__jwt__valid__grp.md5 new file mode 100644 index 00000000..1d492b22 --- /dev/null +++ b/HEAD/group__jwt__valid__grp.md5 @@ -0,0 +1 @@ +3882635bbb28c33dc1f8fcba2cc433b6 \ No newline at end of file diff --git a/HEAD/group__jwt__valid__grp.png b/HEAD/group__jwt__valid__grp.png new file mode 100644 index 00000000..59a0d83e Binary files /dev/null and b/HEAD/group__jwt__valid__grp.png differ diff --git a/HEAD/group__jwt__verify__grp.html b/HEAD/group__jwt__verify__grp.html new file mode 100644 index 00000000..506725f2 --- /dev/null +++ b/HEAD/group__jwt__verify__grp.html @@ -0,0 +1,340 @@ + + + + + + + + +LibJWT: Token Verification + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
Token Verification
+
+
+ +

Functions used to decode and verify signatures for a JWT. +More...

+
+Collaboration diagram for Token Verification:
+
+
+ + + + +
+ + + + + +

+Data Structures

struct  jwt_verify_t
 Used to manage keys for verifying a JWT. More...
 
+ + + + + + + + + + +

+Typedefs

typedef jwt_verify_t jwt_key_t
 Backward compatibility for jwt_decode_2.
 
typedef int(* jwt_verify_p_t) (const jwt_t *, jwt_verify_t *)
 Prototype of the key provider callback.
 
typedef jwt_verify_p_t jwt_key_p_t
 Backward compatibility for jwt_decode_2.
 
+ + + + + + + + + +

+Functions

JWT_EX int jwt_verify (jwt_t **jwt, const char *token, jwt_verify_t *key_v)
 
JWT_EX int jwt_verify_wcb (jwt_t **jwt, const char *token, jwt_verify_t *key_v, jwt_key_p_t key_provider)
 
JWT_EX DEPRECATED int jwt_decode (jwt_t **jwt, const char *token, const unsigned char *key, int key_len)
 
JWT_EX DEPRECATED int jwt_decode_2 (jwt_t **jwt, const char *token, jwt_key_p_t key_provider)
 
+

Detailed Description

+

Functions used to decode and verify signatures for a JWT.

+

Typedef Documentation

+ +

◆ jwt_key_p_t

+ +
+
+ + + + +
typedef jwt_verify_p_t jwt_key_p_t
+
+ +

Backward compatibility for jwt_decode_2.

+ +

Definition at line 388 of file jwt.h.

+ +
+
+ +

◆ jwt_key_t

+ +
+
+ + + + +
typedef jwt_verify_t jwt_key_t
+
+ +

Backward compatibility for jwt_decode_2.

+ +

Definition at line 357 of file jwt.h.

+ +
+
+ +

◆ jwt_verify_p_t

+ +
+
+ + + + +
typedef int(* jwt_verify_p_t) (const jwt_t *, jwt_verify_t *)
+
+ +

Prototype of the key provider callback.

+

This function is expected to return 0 on success, and errno otherwise. On success, the data in jwt_verify_t should be usable to to handle the operation needed to complete the verifification of the signature on the jwt_t.

+
Note
The application is responsible for freeing any memory related to the data used in the key. It must also ensure that the data is in valid memory space until the decode operation completes. E.g. this is what NOT to do...
int my_key_callback(const jwt_t *jwt, jwt_verify_t *key_v)
+
{
+
unsigned char my_key[] = "aljksalkc";
+
key_v->jwt_key = my_key;
+
key_v->jwt_key_len = strlen(my_key);
+
return 0;
+
}
+
struct jwt jwt_t
<
Definition jwt.h:68
+
Used to manage keys for verifying a JWT.
Definition jwt.h:347
+
int jwt_key_len
Length of key material
Definition jwt.h:349
+
const void * jwt_key
Pointer to key material
Definition jwt.h:348
+
In this code, the data for my_key is on this function's stack and will be out of scope once it returns.
+ +

Definition at line 383 of file jwt.h.

+ +
+
+

Function Documentation

+ +

◆ jwt_decode()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
JWT_EX DEPRECATED int jwt_decode (jwt_t ** jwt,
const char * token,
const unsigned char * key,
int key_len )
+
+
Deprecated
See jwt_verify and jwt_verify_wcb instead.
+ +
+
+ +

◆ jwt_decode_2()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX DEPRECATED int jwt_decode_2 (jwt_t ** jwt,
const char * token,
jwt_key_p_t key_provider )
+
+
Deprecated
See jwt_verify and jwt_verify_wcb instead.
+ +
+
+ +

◆ jwt_verify()

+ +
+
+ + + + + + + + + + + + + + + + +
JWT_EX int jwt_verify (jwt_t ** jwt,
const char * token,
jwt_verify_t * key_v )
+
+ +
+
+ +

◆ jwt_verify_wcb()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
JWT_EX int jwt_verify_wcb (jwt_t ** jwt,
const char * token,
jwt_verify_t * key_v,
jwt_key_p_t key_provider )
+
+ +
+
+
+
+ + + + + diff --git a/HEAD/group__jwt__verify__grp.js b/HEAD/group__jwt__verify__grp.js new file mode 100644 index 00000000..66e7b7b2 --- /dev/null +++ b/HEAD/group__jwt__verify__grp.js @@ -0,0 +1,16 @@ +var group__jwt__verify__grp = +[ + [ "jwt_verify_t", "structjwt__verify__t.html", [ + [ "alg", "structjwt__verify__t.html#a8d845c20b0bf4b5c3162b353cd2c9aab", null ], + [ "ctx", "structjwt__verify__t.html#ac1f010c54d3de46721c309adbd31cd1d", null ], + [ "jwt_key", "structjwt__verify__t.html#aef95f32fbe0aee6b891100acf16cb969", null ], + [ "jwt_key_len", "structjwt__verify__t.html#ad5b397e828bc1d4cb9d833a54a035725", null ] + ] ], + [ "jwt_key_p_t", "group__jwt__verify__grp.html#ga42133b3421c04025d37157ffd4c1551c", null ], + [ "jwt_key_t", "group__jwt__verify__grp.html#ga90c0098baf1b6aff6ad1e94f9c96247c", null ], + [ "jwt_verify_p_t", "group__jwt__verify__grp.html#ga9499c15ad0b5890a44c6535782a0bbcf", null ], + [ "jwt_decode", "group__jwt__verify__grp.html#ga60e6f70bc766b7a47b502113cf1c7174", null ], + [ "jwt_decode_2", "group__jwt__verify__grp.html#ga3d4b9811c21893ad7ad2c8d58206dbcb", null ], + [ "jwt_verify", "group__jwt__verify__grp.html#ga2978fb04c015050ad5bc3ddf9d29275d", null ], + [ "jwt_verify_wcb", "group__jwt__verify__grp.html#gab7b1d3205d5c261273a66a6178ce93fc", null ] +]; \ No newline at end of file diff --git a/HEAD/group__jwt__verify__grp.map b/HEAD/group__jwt__verify__grp.map new file mode 100644 index 00000000..fe131f1e --- /dev/null +++ b/HEAD/group__jwt__verify__grp.map @@ -0,0 +1,4 @@ + + + + diff --git a/HEAD/group__jwt__verify__grp.md5 b/HEAD/group__jwt__verify__grp.md5 new file mode 100644 index 00000000..9c53efd6 --- /dev/null +++ b/HEAD/group__jwt__verify__grp.md5 @@ -0,0 +1 @@ +43fbdb2eb8a1eda20faf018523075050 \ No newline at end of file diff --git a/HEAD/group__jwt__verify__grp.png b/HEAD/group__jwt__verify__grp.png new file mode 100644 index 00000000..96b3e02e Binary files /dev/null and b/HEAD/group__jwt__verify__grp.png differ diff --git a/HEAD/index.html b/HEAD/index.html new file mode 100644 index 00000000..1405ba3b --- /dev/null +++ b/HEAD/index.html @@ -0,0 +1,172 @@ + + + + + + + + +LibJWT: Welcome to LibJWT + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
Welcome to LibJWT
+
+
+

+ Supported Standards

+ + + + + + + + + + + + + +
Standard RFC Description
JWT RFC-7519 JSON Web Token
JWA RFC-7518 JSON Web Algorithms
JWS and JWE RFC-7518 Specific types of JWA
JWK RFC-7517 JSON Web Key
JWKS RFC-7517 A set of JWK as an array of "keys"
+
Note
Throughout this documentation you will see links such as the ones above to RFC documents. These are relevant to that particular part of the library and are helpful to understand some of the specific standards that shaped the development of LibJWT.
+

+ Build Prerequisites

+

+Required

+ +

+One or more of these

+
    +
  • OpenSSL (>= 1.1.0)
  • +
  • GnuTLS (>= 3.6.0)
  • +
+
Note
OpenSSL >= 3.0 is required for JWK and JWKS support
+

+Optional

+ +

+ Docs and Source

+

GitHub Pages

+

GitHub Repo

+

+ Pre-built Packages

+

LibJWT is available in most Linux distributions as well as through Homebrew.

+

+ Build Instructions

+

+With GNU AutoTools:

+
$ autoreconf -if
+
$ mkdir build
+
$ cd build
+
$ ../configure
+
$ make
+

+With CMake:

+
$ mkdir build
+
$ cd build
+
$ cmake ..
+
$ make
+

+Common

+

If you have libcheck installed, both targets will compile the test suite which you can run using the check target.

+

Both build systems will auto detect OpenSSL and GnuTLS and use one or both. Each build system has a way to force-enable (error if not found) or force-disable either library. See the Cryptographic Operations section

+
+ +
+
+ + + + + diff --git a/HEAD/index.js b/HEAD/index.js new file mode 100644 index 00000000..8f42f789 --- /dev/null +++ b/HEAD/index.js @@ -0,0 +1,16 @@ +var index = +[ + [ "Supported Standards", "index.html#standards", null ], + [ "Build Prerequisites", "index.html#building", [ + [ "Required", "index.html#req", null ], + [ "One or more of these", "index.html#req_crypto", null ], + [ "Optional", "index.html#optional", null ] + ] ], + [ "Docs and Source", "index.html#docs", null ], + [ "Pre-built Packages", "index.html#prebuilt", null ], + [ "Build Instructions", "index.html#instructions", [ + [ "With GNU AutoTools:", "index.html#autotools", null ], + [ "With CMake:", "index.html#cmake", null ], + [ "Common", "index.html#common", null ] + ] ] +]; \ No newline at end of file diff --git a/HEAD/jquery.js b/HEAD/jquery.js new file mode 100644 index 00000000..875ada73 --- /dev/null +++ b/HEAD/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/HEAD/jwt_8h.html b/HEAD/jwt_8h.html new file mode 100644 index 00000000..6c73ee11 --- /dev/null +++ b/HEAD/jwt_8h.html @@ -0,0 +1,469 @@ + + + + + + + + +LibJWT: include/jwt.h File Reference + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+ +
jwt.h File Reference
+
+
+ +

The C JSON Web Token Library +JWK + JWKS. +More...

+
#include <stdio.h>
+#include <time.h>
+
+Include dependency graph for jwt.h:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Data Structures

struct  jwk_item_t
 Structural representation of a JWK. More...
 
struct  jwt_verify_t
 Used to manage keys for verifying a JWT. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

typedef struct jwt jwt_t
 <
 
typedef struct jwt_valid jwt_valid_t
 Opaque JWT Validation object.
 
typedef struct jwk_set jwk_set_t
 Opaque JWKS object.
 
typedef void *(* jwt_malloc_t) (size_t)
 Prototype for malloc(3)
 
typedef void *(* jwt_realloc_t) (void *, size_t)
 Prototype for realloc(3)
 
typedef void(* jwt_free_t) (void *)
 Prototype for free(3)
 
typedef jwt_verify_t jwt_key_t
 Backward compatibility for jwt_decode_2.
 
typedef int(* jwt_verify_p_t) (const jwt_t *, jwt_verify_t *)
 Prototype of the key provider callback.
 
typedef jwt_verify_p_t jwt_key_p_t
 Backward compatibility for jwt_decode_2.
 
+ + + + + + + + + + + + + + + + + + + +

+Enumerations

enum  jwt_alg_t {
+  JWT_ALG_NONE +, JWT_ALG_HS256 +, JWT_ALG_HS384 +, JWT_ALG_HS512 +,
+  JWT_ALG_RS256 +, JWT_ALG_RS384 +, JWT_ALG_RS512 +, JWT_ALG_ES256 +,
+  JWT_ALG_ES384 +, JWT_ALG_ES512 +, JWT_ALG_PS256 +, JWT_ALG_PS384 +,
+  JWT_ALG_PS512 +, JWT_ALG_ES256K +, JWT_ALG_EDDSA +, JWT_ALG_INVAL +
+ }
 JWT algorithm types. More...
 
enum  jwt_crypto_provider_t { JWT_CRYPTO_OPS_NONE +, JWT_CRYPTO_OPS_OPENSSL +, JWT_CRYPTO_OPS_GNUTLS +, JWT_CRYPTO_OPS_MBEDTLS + }
 Different providers for crypto operations. More...
 
enum  jwk_key_type_t { JWK_KEY_TYPE_NONE +, JWK_KEY_TYPE_EC +, JWK_KEY_TYPE_RSA +, JWK_KEY_TYPE_OKP + }
 JWK Key Types. More...
 
enum  jwk_pub_key_use_t { JWK_PUB_KEY_USE_NONE +, JWK_PUB_KEY_USE_SIG +, JWK_PUB_KEY_USE_ENC + }
 Usage types for JWK public keys. More...
 
enum  jwk_key_op_t {
+  JWK_KEY_OP_NONE +, JWK_KEY_OP_SIGN +, JWK_KEY_OP_VERIFY +, JWK_KEY_OP_ENCRYPT +,
+  JWK_KEY_OP_DECRYPT +, JWK_KEY_OP_WRAP +, JWK_KEY_OP_UNWRAP +, JWK_KEY_OP_DERIVE_KEY +,
+  JWK_KEY_OP_DERIVE_BITS +, JWK_KEY_OP_INVALID +
+ }
 Allowed key operations for JWK private keys. More...
 
enum  jwt_valid_exception_t {
+  JWT_VALIDATION_SUCCESS +, JWT_VALIDATION_ERROR +, JWT_VALIDATION_ALG_MISMATCH +, JWT_VALIDATION_EXPIRED +,
+  JWT_VALIDATION_TOO_NEW +, JWT_VALIDATION_ISS_MISMATCH +, JWT_VALIDATION_SUB_MISMATCH +, JWT_VALIDATION_AUD_MISMATCH +,
+  JWT_VALIDATION_GRANT_MISSING +, JWT_VALIDATION_GRANT_MISMATCH +
+ }
 Validation exception types for jwt_t objects. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

JWT_EX int jwt_new (jwt_t **jwt)
 Allocate a new, empty, JWT object.
 
JWT_EX void jwt_free (jwt_t *jwt)
 Free a JWT object and any other resources it is using.
 
JWT_EX jwt_tjwt_dup (jwt_t *jwt)
 Duplicate an existing JWT object.
 
JWT_EX int jwt_verify (jwt_t **jwt, const char *token, jwt_verify_t *key_v)
 
JWT_EX int jwt_verify_wcb (jwt_t **jwt, const char *token, jwt_verify_t *key_v, jwt_key_p_t key_provider)
 
JWT_EX DEPRECATED int jwt_decode (jwt_t **jwt, const char *token, const unsigned char *key, int key_len)
 
JWT_EX DEPRECATED int jwt_decode_2 (jwt_t **jwt, const char *token, jwt_key_p_t key_provider)
 
JWT_EX const char * jwt_get_grant (jwt_t *jwt, const char *grant)
 Return the value of a string grant.
 
JWT_EX long jwt_get_grant_int (jwt_t *jwt, const char *grant)
 Return the value of an integer grant.
 
JWT_EX int jwt_get_grant_bool (jwt_t *jwt, const char *grant)
 Return the value of an boolean grant.
 
JWT_EX char * jwt_get_grants_json (jwt_t *jwt, const char *grant)
 Return the value of a grant as JSON encoded object string.
 
JWT_EX int jwt_add_grant (jwt_t *jwt, const char *grant, const char *val)
 Add a new string grant to this JWT object.
 
JWT_EX int jwt_add_grant_int (jwt_t *jwt, const char *grant, long val)
 Add a new integer grant to this JWT object.
 
JWT_EX int jwt_add_grant_bool (jwt_t *jwt, const char *grant, int val)
 Add a new boolean grant to this JWT object.
 
JWT_EX int jwt_add_grants_json (jwt_t *jwt, const char *json)
 Add grants from a JSON encoded object string.
 
JWT_EX int jwt_del_grants (jwt_t *jwt, const char *grant)
 Delete a grant from this JWT object.
 
JWT_EX const char * jwt_get_header (jwt_t *jwt, const char *header)
 Return the value of a string header.
 
JWT_EX long jwt_get_header_int (jwt_t *jwt, const char *header)
 Return the value of an integer header.
 
JWT_EX int jwt_get_header_bool (jwt_t *jwt, const char *header)
 Return the value of an boolean header.
 
JWT_EX char * jwt_get_headers_json (jwt_t *jwt, const char *header)
 Return the value of a header as JSON encoded object string.
 
JWT_EX int jwt_add_header (jwt_t *jwt, const char *header, const char *val)
 Add a new string header to this JWT object.
 
JWT_EX int jwt_add_header_int (jwt_t *jwt, const char *header, long val)
 Add a new integer header to this JWT object.
 
JWT_EX int jwt_add_header_bool (jwt_t *jwt, const char *header, int val)
 Add a new boolean header to this JWT object.
 
JWT_EX int jwt_add_headers_json (jwt_t *jwt, const char *json)
 Add headers from a JSON encoded object string.
 
JWT_EX int jwt_del_headers (jwt_t *jwt, const char *header)
 Delete a header from this JWT object.
 
JWT_EX int jwt_dump_fp (jwt_t *jwt, FILE *fp, int pretty)
 Output plain text representation to a FILE pointer.
 
JWT_EX char * jwt_dump_str (jwt_t *jwt, int pretty)
 Return plain text representation as a string.
 
JWT_EX char * jwt_dump_grants_str (jwt_t *jwt, int pretty)
 Return plain text representation of grants as a string.
 
JWT_EX int jwt_encode_fp (jwt_t *jwt, FILE *fp)
 Fully encode a JWT object and write it to FILE.
 
JWT_EX char * jwt_encode_str (jwt_t *jwt)
 Fully encode a JWT object and return as a string.
 
JWT_EX void jwt_free_str (char *str)
 Free a string returned from the library.
 
JWT_EX int jwt_set_alg (jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len)
 Set an algorithm for a jwt_t object.
 
JWT_EX jwt_alg_t jwt_get_alg (const jwt_t *jwt)
 Get the jwt_alg_t set for this JWT object.
 
JWT_EX const char * jwt_alg_str (jwt_alg_t alg)
 Convert alg type to it's string representation.
 
JWT_EX jwt_alg_t jwt_str_alg (const char *alg)
 Convert alg string to type.
 
JWT_EX jwk_set_tjwks_create (const char *jwk_json_str)
 Create a new JWKS object for later use in validating JWTs.
 
JWT_EX int jwks_item_add (jwk_set_t *jwk_set, jwk_item_t *item)
 Add a jwk_item_t to an existing jwk_set_t.
 
JWT_EX int jwks_error (jwk_set_t *jwk_set)
 Check if there is an error within the jwk_set.
 
JWT_EX int jwks_error_any (jwk_set_t *jwk_set)
 Check if there is an error within the jwk_set and any of the jwk_item_t in the set.
 
JWT_EX const char * jwks_error_msg (jwk_set_t *jwk_set)
 Retrieve an error message from a jwk_set.
 
JWT_EX jwk_item_tjwks_item_get (jwk_set_t *jwk_set, size_t index)
 Return the index'th jwk_item in the jwk_set.
 
JWT_EX void jwks_free (jwk_set_t *jwk_set)
 Free all memory associated with a jwt_set_t, including any jwk_item_t in the set.
 
JWT_EX int jwks_item_free (jwk_set_t *jwk_set, size_t index)
 Free all memory associated with the nth jwt_item_t in a jwk_set.
 
JWT_EX int jwks_item_free_all (jwk_set_t *jwk_set)
 Free all memory associated with alljwt_item_t in a jwk_set.
 
JWT_EX jwt_valid_exception_t jwt_validate (jwt_t *jwt, jwt_valid_t *jwt_valid)
 Validate a JWT object with a validation object.
 
JWT_EX int jwt_valid_new (jwt_valid_t **jwt_valid, jwt_alg_t alg)
 Allocate a new, JWT validation object.
 
JWT_EX void jwt_valid_free (jwt_valid_t *jwt_valid)
 Free a JWT validation object and any other resources it is using.
 
JWT_EX jwt_valid_exception_t jwt_valid_get_status (jwt_valid_t *jwt_valid)
 Return the status string for the validation object.
 
JWT_EX time_t jwt_valid_get_nbf_leeway (jwt_valid_t *jwt_valid)
 Return the nbf_leeway value set.
 
JWT_EX time_t jwt_valid_get_exp_leeway (jwt_valid_t *jwt_valid)
 Return the exp_leeway value set.
 
JWT_EX int jwt_valid_add_grant (jwt_valid_t *jwt_valid, const char *grant, const char *val)
 Add a new string grant requirement to this JWT validation object.
 
JWT_EX const char * jwt_valid_get_grant (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of a string required grant.
 
JWT_EX int jwt_valid_add_grant_int (jwt_valid_t *jwt_valid, const char *grant, long val)
 Add a new integer grant requirement to this JWT validation object.
 
JWT_EX long jwt_valid_get_grant_int (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of an integer required grant.
 
JWT_EX int jwt_valid_add_grant_bool (jwt_valid_t *jwt_valid, const char *grant, int val)
 Add a new boolean required grant to this JWT validation object.
 
JWT_EX int jwt_valid_get_grant_bool (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of an boolean required grant.
 
JWT_EX int jwt_valid_add_grants_json (jwt_valid_t *jwt_valid, const char *json)
 Add required grants from a JSON encoded object string.
 
JWT_EX char * jwt_valid_get_grants_json (jwt_valid_t *jwt_valid, const char *grant)
 Return the value of a grant as JSON encoded object string.
 
JWT_EX int jwt_valid_del_grants (jwt_valid_t *jwt_valid, const char *grant)
 Delete a grant from this JWT object.
 
JWT_EX int jwt_valid_set_now (jwt_valid_t *jwt_valid, const time_t now)
 Set the time for which expires and not-before claims should be evaluated.
 
JWT_EX int jwt_valid_set_nbf_leeway (jwt_valid_t *jwt_valid, const time_t nbf_leeway)
 Set the nbf_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.5.
 
JWT_EX int jwt_valid_set_exp_leeway (jwt_valid_t *jwt_valid, const time_t exp_leeway)
 Set the exp_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4.
 
JWT_EX int jwt_valid_set_headers (jwt_valid_t *jwt_valid, int hdr)
 Set validation for replicated claims in headers.
 
JWT_EX char * jwt_exception_str (unsigned int exceptions)
 Parses exceptions and returns a comma delimited and human-readable string.
 
JWT_EX int jwt_set_alloc (jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree)
 Set functions to be used for allocating and freeing memory.
 
JWT_EX void jwt_get_alloc (jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree)
 Get functions used for allocating and freeing memory.
 
JWT_EX const char * jwt_get_crypto_ops (void)
 Retrieve the name of the current crypto operations being used.
 
JWT_EX jwt_crypto_provider_t jwt_get_crypto_ops_t (void)
 Retrieve the type of the current crypto operations being used.
 
JWT_EX int jwt_set_crypto_ops (const char *opname)
 Set the crypto operations to the named set.
 
JWT_EX int jwt_set_crypto_ops_t (jwt_crypto_provider_t opname)
 Set the crypto operations to a jwt_crypto_provider_t type.
 
JWT_EX int jwt_crypto_ops_supports_jwk (void)
 Check if the current crypto operations support JWK usage.
 
+

Detailed Description

+

The C JSON Web Token Library +JWK + JWKS.

+ +

Definition in file jwt.h.

+
+
+ + + + + diff --git a/HEAD/jwt_8h.js b/HEAD/jwt_8h.js new file mode 100644 index 00000000..d3a0c525 --- /dev/null +++ b/HEAD/jwt_8h.js @@ -0,0 +1,142 @@ +var jwt_8h = +[ + [ "jwk_set_t", "group__jwks__core__grp.html#ga380f2d92f1d0d306420729f9789f5e50", null ], + [ "jwt_free_t", "group__jwt__memory__grp.html#gad3b3fc88482616b2883b786d0700c377", null ], + [ "jwt_key_p_t", "group__jwt__verify__grp.html#ga42133b3421c04025d37157ffd4c1551c", null ], + [ "jwt_key_t", "group__jwt__verify__grp.html#ga90c0098baf1b6aff6ad1e94f9c96247c", null ], + [ "jwt_malloc_t", "group__jwt__memory__grp.html#gae64b1a91c7e44845d2422f5a6bfa7972", null ], + [ "jwt_realloc_t", "group__jwt__memory__grp.html#gaee904814d9c9266c68d2abff08fbc5af", null ], + [ "jwt_t", "group__jwt__core__grp.html#gabf0acfb990d245214216af589c1d0947", null ], + [ "jwt_valid_t", "group__jwt__valid__grp.html#gac413377fbfc11671e8a8a66f45693e5d", null ], + [ "jwt_verify_p_t", "group__jwt__verify__grp.html#ga9499c15ad0b5890a44c6535782a0bbcf", null ], + [ "jwk_key_op_t", "group__jwks__core__grp.html#ga150285e933a3d456bcd8d87b906438a3", [ + [ "JWK_KEY_OP_NONE", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a9054426563814eff0f4ea23def0e00f9", null ], + [ "JWK_KEY_OP_SIGN", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a893a71fda7261466815427686f349eef", null ], + [ "JWK_KEY_OP_VERIFY", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a76ea53a146dac84cffa46681bbc7fc2e", null ], + [ "JWK_KEY_OP_ENCRYPT", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a1101574110cba3dd17ff829d728ceb5b", null ], + [ "JWK_KEY_OP_DECRYPT", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a9a4c0f1119d858a8bda1f7cecfb98d79", null ], + [ "JWK_KEY_OP_WRAP", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a451f04d391cf27e7938c6b29324272c8", null ], + [ "JWK_KEY_OP_UNWRAP", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a56462a753babcb3a1593a5436d677667", null ], + [ "JWK_KEY_OP_DERIVE_KEY", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3adb8b6296fb02fd5e961d89310edf7ce6", null ], + [ "JWK_KEY_OP_DERIVE_BITS", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3a073d4ad92c0276dbc1ecdc874231ce39", null ], + [ "JWK_KEY_OP_INVALID", "group__jwks__core__grp.html#gga150285e933a3d456bcd8d87b906438a3aeb336579eb3c3c3e6f563b2a36d1511f", null ] + ] ], + [ "jwk_key_type_t", "group__jwks__core__grp.html#ga6ee53248054c67e9585aae9e937890f2", [ + [ "JWK_KEY_TYPE_NONE", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2a91865197de901ef236c5570a7c6897d9", null ], + [ "JWK_KEY_TYPE_EC", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2ad7065b821b8699d3b42fe0c3263dd3b1", null ], + [ "JWK_KEY_TYPE_RSA", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2af1a4bf01f937df96d195572180f036d8", null ], + [ "JWK_KEY_TYPE_OKP", "group__jwks__core__grp.html#gga6ee53248054c67e9585aae9e937890f2ab42a328b8fc31e10c3f5e38e953c684c", null ] + ] ], + [ "jwk_pub_key_use_t", "group__jwks__core__grp.html#gab30049eeae2a6ecdc0c9ae849b835b6b", [ + [ "JWK_PUB_KEY_USE_NONE", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6baf3e36efeb7307384fa7f7dbee089573b", null ], + [ "JWK_PUB_KEY_USE_SIG", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6ba5c6c707d72a666971135ad6bec551b99", null ], + [ "JWK_PUB_KEY_USE_ENC", "group__jwks__core__grp.html#ggab30049eeae2a6ecdc0c9ae849b835b6baefac5505199173f9c52530be55a54408", null ] + ] ], + [ "jwt_alg_t", "group__jwt__core__grp.html#ga889db178d8714ab67bc994f1d8faad33", [ + [ "JWT_ALG_NONE", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a3249a71140a0bb4b3cb196fe15114b89", null ], + [ "JWT_ALG_HS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aaa9217f4c8f5266d5401402f0ec98604", null ], + [ "JWT_ALG_HS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33af0adc69b9caa89fbc2eeaf744d7cf4f2", null ], + [ "JWT_ALG_HS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a596b0da85c01e17b43a6574f82159081", null ], + [ "JWT_ALG_RS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aa03ba981baa4b1cda3b9de1347ada853", null ], + [ "JWT_ALG_RS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a520814a2695a6df472bb408ba6feb206", null ], + [ "JWT_ALG_RS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ab4d732eef3f6bee21201d638dfd8ca44", null ], + [ "JWT_ALG_ES256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a84f9bf1cb93f6ae622a9de57d9c67472", null ], + [ "JWT_ALG_ES384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ae18e69e6b629aa0d3e6d16ec4a95c708", null ], + [ "JWT_ALG_ES512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a87205e19f1dde7c3cee012424482e106", null ], + [ "JWT_ALG_PS256", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33ad0216cbdf24f6b486d5082294b3cfc5b", null ], + [ "JWT_ALG_PS384", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a3ad3c7e704886dd61dee0de5fa02072d", null ], + [ "JWT_ALG_PS512", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a727c838b47ad911681eb029cc8b55744", null ], + [ "JWT_ALG_ES256K", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a7f760cf9ed49b80ecb78580ed381ff01", null ], + [ "JWT_ALG_EDDSA", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33aab33738e67e3b23db72a3bc77043009b", null ], + [ "JWT_ALG_INVAL", "group__jwt__core__grp.html#gga889db178d8714ab67bc994f1d8faad33a199f5ce0e69c0160cc121cf6dbe9cb58", null ] + ] ], + [ "jwt_crypto_provider_t", "group__jwt__crypto__grp.html#gaa1e2b1f241858d81b1bfb86018d3b3ac", [ + [ "JWT_CRYPTO_OPS_NONE", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca482aa19a4996aaddbfd0349356be92c2", null ], + [ "JWT_CRYPTO_OPS_OPENSSL", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca5ebef71958d3135b13ada7bb72a63b02", null ], + [ "JWT_CRYPTO_OPS_GNUTLS", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3acaee34d6e9a11bfaa47e01c56a66682750", null ], + [ "JWT_CRYPTO_OPS_MBEDTLS", "group__jwt__crypto__grp.html#ggaa1e2b1f241858d81b1bfb86018d3b3aca4c5fd08d7061b5caba0f8698dc817306", null ] + ] ], + [ "jwt_valid_exception_t", "group__jwt__valid__grp.html#ga47ee94f9c08ff581f78590bfe024f6e4", [ + [ "JWT_VALIDATION_SUCCESS", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a94bb9121f597e706e89322b0f9a7330b", null ], + [ "JWT_VALIDATION_ERROR", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4ad2e58b1f8a8bc39518b1c973fa99ee6e", null ], + [ "JWT_VALIDATION_ALG_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4abf0dc5dd94b521a118485a9522cd8cea", null ], + [ "JWT_VALIDATION_EXPIRED", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a698be61a7f4bcf0dfd9894e1c6296e0b", null ], + [ "JWT_VALIDATION_TOO_NEW", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a685c5270c214bf2484b65376e4b7459b", null ], + [ "JWT_VALIDATION_ISS_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a0dde2793247cd11fbf017212d8fd605f", null ], + [ "JWT_VALIDATION_SUB_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4ac8b2989c55deb3bdad631c61f1ed304d", null ], + [ "JWT_VALIDATION_AUD_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4acb9d53e3cc20a39c0827d77a071271e6", null ], + [ "JWT_VALIDATION_GRANT_MISSING", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a94eb7551ec626004a55798ecbd563d38", null ], + [ "JWT_VALIDATION_GRANT_MISMATCH", "group__jwt__valid__grp.html#gga47ee94f9c08ff581f78590bfe024f6e4a5b1db073c57082b557592b7115a8e363", null ] + ] ], + [ "jwks_create", "group__jwks__core__grp.html#ga98344761fc19ea7ee5390ae9e8d2cca7", null ], + [ "jwks_error", "group__jwks__core__grp.html#gaa084f1f35b118c90e23fec8424e83e4e", null ], + [ "jwks_error_any", "group__jwks__core__grp.html#gaa1de410ba108a14f9aa74575105a06a5", null ], + [ "jwks_error_msg", "group__jwks__core__grp.html#gaf334f7d92468eeca912fbd540a3cd290", null ], + [ "jwks_free", "group__jwks__core__grp.html#ga7f26c5a8c1acb214f9d7e64001281fc4", null ], + [ "jwks_item_add", "group__jwks__core__grp.html#ga0412942c5cb9ebc33a138d58be87a328", null ], + [ "jwks_item_free", "group__jwks__core__grp.html#ga545755c81613b5959422b7ed90db389a", null ], + [ "jwks_item_free_all", "group__jwks__core__grp.html#gad13bed808cadfa3f1fff97d678e4a3e7", null ], + [ "jwks_item_get", "group__jwks__core__grp.html#ga916f7aec6ec88984dc878c85f6218d9e", null ], + [ "jwt_add_grant", "group__jwt__grant__grp.html#ga391fe3800ff1732963c2378be03ba6c5", null ], + [ "jwt_add_grant_bool", "group__jwt__grant__grp.html#ga121c420f2260c390766cb876457e08a8", null ], + [ "jwt_add_grant_int", "group__jwt__grant__grp.html#ga131263c6fef541091502a6643d821a89", null ], + [ "jwt_add_grants_json", "group__jwt__grant__grp.html#ga8cea5a3568a484409da924b0e1e9fa2b", null ], + [ "jwt_add_header", "group__jwt__header__grp.html#gab491db511b55567d85fd0e6eaed9fd3b", null ], + [ "jwt_add_header_bool", "group__jwt__header__grp.html#gaec63a7fd38567b56571548d78a323dcc", null ], + [ "jwt_add_header_int", "group__jwt__header__grp.html#gae44ee81cba151fe398c1c2cd0ef54c11", null ], + [ "jwt_add_headers_json", "group__jwt__header__grp.html#gaa67f2e193581d7bc1f2d04e21cca257b", null ], + [ "jwt_alg_str", "group__jwt__alg__grp.html#gae91ac529fd01b9b8e460bc139ac3d815", null ], + [ "jwt_crypto_ops_supports_jwk", "group__jwt__crypto__grp.html#ga474657beb4da21302cb8749cd252ff99", null ], + [ "jwt_decode", "group__jwt__verify__grp.html#ga60e6f70bc766b7a47b502113cf1c7174", null ], + [ "jwt_decode_2", "group__jwt__verify__grp.html#ga3d4b9811c21893ad7ad2c8d58206dbcb", null ], + [ "jwt_del_grants", "group__jwt__grant__grp.html#ga60adda362cb83653d5acd64643028148", null ], + [ "jwt_del_headers", "group__jwt__header__grp.html#gab8b25d007b7d36f5633b3967f538c4a0", null ], + [ "jwt_dump_fp", "group__jwt__encode__grp.html#ga11e99992cb0546fb0e7800a63ad46c46", null ], + [ "jwt_dump_grants_str", "group__jwt__encode__grp.html#ga88852a075b9fb57e4bcbd502b9e4378d", null ], + [ "jwt_dump_str", "group__jwt__encode__grp.html#gab8d2787c3f2413f24dc93f6d94dc4a75", null ], + [ "jwt_dup", "group__jwt__core__grp.html#ga4f08487beba3df7c581e1ec19d56c228", null ], + [ "jwt_encode_fp", "group__jwt__encode__grp.html#ga75068d73df905ce4c92af3e0769c91d4", null ], + [ "jwt_encode_str", "group__jwt__encode__grp.html#ga6c22c8123a9cf8bbcd7596562cd3ba98", null ], + [ "jwt_exception_str", "group__jwt__valid__grp.html#ga62aa101df260ec31133eeb4c4c52b80a", null ], + [ "jwt_free", "group__jwt__core__grp.html#gac7f03a454a32ab8da207d0188f23543c", null ], + [ "jwt_free_str", "group__jwt__encode__grp.html#gaa4a31fd1663c0338afaf79d0ee3a4849", null ], + [ "jwt_get_alg", "group__jwt__alg__grp.html#ga364eef40d9a6c8e4770e0dd51aa22f25", null ], + [ "jwt_get_alloc", "group__jwt__memory__grp.html#gad4c9b239d50fef715f78fcdc0084a289", null ], + [ "jwt_get_crypto_ops", "group__jwt__crypto__grp.html#ga33cf3289adddfce70dd01a0fc0a35b30", null ], + [ "jwt_get_crypto_ops_t", "group__jwt__crypto__grp.html#gac876000474c98d4b43156bd184958ddc", null ], + [ "jwt_get_grant", "group__jwt__grant__grp.html#ga842126cace5bc8dd002061492c3cf324", null ], + [ "jwt_get_grant_bool", "group__jwt__grant__grp.html#gac26cd963fd3acab4abf19fb8fd3fa2f3", null ], + [ "jwt_get_grant_int", "group__jwt__grant__grp.html#ga2d501d6d45a9c07cd206ede06d12b4c2", null ], + [ "jwt_get_grants_json", "group__jwt__grant__grp.html#gad46782d1f6217651a88129329a7b2cd8", null ], + [ "jwt_get_header", "group__jwt__header__grp.html#gaed98c372e51147d9976e1818840fa54e", null ], + [ "jwt_get_header_bool", "group__jwt__header__grp.html#gab15733eb16e51d6484ed787446ed7f47", null ], + [ "jwt_get_header_int", "group__jwt__header__grp.html#ga516a0be7adfede913713447e5a2837d6", null ], + [ "jwt_get_headers_json", "group__jwt__header__grp.html#ga3143090567d2e98ec2949a1e2850cbbf", null ], + [ "jwt_new", "group__jwt__core__grp.html#ga534a2c12f9b7c509c9ea86d0f465d604", null ], + [ "jwt_set_alg", "group__jwt__alg__grp.html#ga575a8ddf4f93aa4244178305a9d256b3", null ], + [ "jwt_set_alloc", "group__jwt__memory__grp.html#ga6fed66d8d3c2fe378fdbf82c309ad61b", null ], + [ "jwt_set_crypto_ops", "group__jwt__crypto__grp.html#gaf2ecab819fff188a5f2ef561f2c064d4", null ], + [ "jwt_set_crypto_ops_t", "group__jwt__crypto__grp.html#gab1a923883a96ce4e29326d35d7988a7f", null ], + [ "jwt_str_alg", "group__jwt__alg__grp.html#ga48166bba74d72030639de583fca0647f", null ], + [ "jwt_valid_add_grant", "group__jwt__valid__grp.html#gaf314c644fea06547647958483759ceac", null ], + [ "jwt_valid_add_grant_bool", "group__jwt__valid__grp.html#ga8900a467e4176b1fa9b622a2705269ee", null ], + [ "jwt_valid_add_grant_int", "group__jwt__valid__grp.html#gabacde09b87fca8b096d291163f4c4a5c", null ], + [ "jwt_valid_add_grants_json", "group__jwt__valid__grp.html#gab75b56ce400f582ace10a4e524635286", null ], + [ "jwt_valid_del_grants", "group__jwt__valid__grp.html#gaf9f8b1dbe950cf2fc9a8200cf749a442", null ], + [ "jwt_valid_free", "group__jwt__valid__grp.html#ga728df4b06a8265eaaea237641185c76f", null ], + [ "jwt_valid_get_exp_leeway", "group__jwt__valid__grp.html#gaeb53cb3059ef0a6969f9d401e76958c2", null ], + [ "jwt_valid_get_grant", "group__jwt__valid__grp.html#ga7f2277d29179a01928c0ebe4fbef1a7c", null ], + [ "jwt_valid_get_grant_bool", "group__jwt__valid__grp.html#ga1bcf672c544bd4d2ebb656a79ce90f69", null ], + [ "jwt_valid_get_grant_int", "group__jwt__valid__grp.html#ga1af73c88e51e80f456e10cdd43bcf2f1", null ], + [ "jwt_valid_get_grants_json", "group__jwt__valid__grp.html#ga19a0badfa97417865fe6053c8d9c076e", null ], + [ "jwt_valid_get_nbf_leeway", "group__jwt__valid__grp.html#gaea88716bb3596c459da61677e8184662", null ], + [ "jwt_valid_get_status", "group__jwt__valid__grp.html#gaffc50a84a9914aa74f233054fd243a61", null ], + [ "jwt_valid_new", "group__jwt__valid__grp.html#ga88d954bf262717532dba3f8d9d29c8af", null ], + [ "jwt_valid_set_exp_leeway", "group__jwt__valid__grp.html#ga7d4a3188a889ae2a0837aec6f358cde5", null ], + [ "jwt_valid_set_headers", "group__jwt__valid__grp.html#gaf12cd57921f54714ec74ced386a80981", null ], + [ "jwt_valid_set_nbf_leeway", "group__jwt__valid__grp.html#gae0319eaec4c9a1e706b85aa365ada20e", null ], + [ "jwt_valid_set_now", "group__jwt__valid__grp.html#ga8e5fbc676ebc0a0286bc70b9d062d53e", null ], + [ "jwt_validate", "group__jwt__valid__grp.html#ga9ce197165c625f967f889212ca9fab86", null ], + [ "jwt_verify", "group__jwt__verify__grp.html#ga2978fb04c015050ad5bc3ddf9d29275d", null ], + [ "jwt_verify_wcb", "group__jwt__verify__grp.html#gab7b1d3205d5c261273a66a6178ce93fc", null ] +]; \ No newline at end of file diff --git a/HEAD/jwt_8h__incl.map b/HEAD/jwt_8h__incl.map new file mode 100644 index 00000000..af22af1d --- /dev/null +++ b/HEAD/jwt_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/HEAD/jwt_8h__incl.md5 b/HEAD/jwt_8h__incl.md5 new file mode 100644 index 00000000..5f14fb29 --- /dev/null +++ b/HEAD/jwt_8h__incl.md5 @@ -0,0 +1 @@ +d5201dc77022b4a0025a00409e171169 \ No newline at end of file diff --git a/HEAD/jwt_8h__incl.png b/HEAD/jwt_8h__incl.png new file mode 100644 index 00000000..69b69926 Binary files /dev/null and b/HEAD/jwt_8h__incl.png differ diff --git a/HEAD/jwt_8h_source.html b/HEAD/jwt_8h_source.html new file mode 100644 index 00000000..5b85f711 --- /dev/null +++ b/HEAD/jwt_8h_source.html @@ -0,0 +1,587 @@ + + + + + + + + +LibJWT: include/jwt.h Source File + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
LibJWT v2.1.0 +
+
The C JSON Web Token Library +JWK +JWKS
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+
+
jwt.h
+
+
+Go to the documentation of this file.
1/* Copyright (C) 2015-2024 maClara, LLC <info@maclara-llc.com>
+
2 This file is part of the JWT C Library
+
3
+
4 SPDX-License-Identifier: MPL-2.0
+
5 This Source Code Form is subject to the terms of the Mozilla Public
+
6 License, v. 2.0. If a copy of the MPL was not distributed with this
+
7 file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
8
+
16#ifndef JWT_H
+
17#define JWT_H
+
18
+
19#include <stdio.h>
+
20#include <time.h>
+
21
+
23#ifdef _MSC_VER
+
24
+
25 #define DEPRECATED __declspec(deprecated)
+
26
+
27 #define alloca _alloca
+
28 #define strcasecmp _stricmp
+
29 #define strdup _strdup
+
30
+
31 #ifdef JWT_DLL_CONFIG
+
32 #ifdef JWT_BUILD_SHARED_LIBRARY
+
33 #define JWT_EX __declspec(dllexport)
+
34 #else
+
35 #define JWT_EX __declspec(dllimport)
+
36 #endif
+
37 #else
+
38 #define JWT_EX
+
39 #endif
+
40
+
41#else
+
42
+
43 #define DEPRECATED __attribute__ ((deprecated))
+
44 #define JWT_EX
+
45
+
46#endif
+
47
+
48#ifdef _JWT_LOCAL_TEST
+
49#undef DEPRECATED
+
50#define DEPRECATED
+
51#endif
+
54#ifdef __cplusplus
+
55extern "C" {
+
56#endif
+
57
+
68typedef struct jwt jwt_t;
+
69
+
75typedef struct jwt_valid jwt_valid_t;
+
76
+
87typedef struct jwk_set jwk_set_t;
+
88
+ +
123
+ +
140
+ +
154
+ +
167
+
+
182typedef enum {
+ + + + + + + + + + + +
+
194
+
+
211typedef struct {
+ +
213 char *pem;
+ + + +
217 char curve[256];
+
218 size_t bits;
+
219 int error;
+
220 char error_msg[256];
+ + + +
224 char *kid;
+
225} jwk_item_t;
+
+
226
+ +
248
+
252typedef void *(*jwt_malloc_t)(size_t);
+
253
+
257typedef void *(*jwt_realloc_t)(void *, size_t);
+
258
+
262typedef void (*jwt_free_t)(void *);
+
263
+
299JWT_EX int jwt_new(jwt_t **jwt);
+
300
+
310JWT_EX void jwt_free(jwt_t *jwt);
+
311
+
312#if defined(__GNUC__) || defined(__clang__)
+
316static inline void jwt_freep(jwt_t **jwt) {
+
317 if (jwt) {
+
318 jwt_free(*jwt);
+
319 *jwt = NULL;
+
320 }
+
321}
+
322#define jwt_auto_t jwt_t __attribute__((cleanup(jwt_freep)))
+
323#endif
+
324
+
334JWT_EX jwt_t *jwt_dup(jwt_t *jwt);
+
335
+
+
347typedef struct {
+
348 const void *jwt_key;
+ + +
351 void *ctx;
+ +
+
353
+ +
358
+
383typedef int (*jwt_verify_p_t)(const jwt_t *, jwt_verify_t *);
+
384
+ +
389
+
390JWT_EX int jwt_verify(jwt_t **jwt, const char *token, jwt_verify_t *key_v);
+
391
+
392JWT_EX int jwt_verify_wcb(jwt_t **jwt, const char *token,
+
393 jwt_verify_t *key_v, jwt_key_p_t key_provider);
+
394
+
400JWT_EX DEPRECATED int jwt_decode(jwt_t **jwt, const char *token,
+
401 const unsigned char *key, int key_len);
+
402
+
408JWT_EX DEPRECATED int jwt_decode_2(jwt_t **jwt, const char *token,
+
409 jwt_key_p_t key_provider);
+
410
+
436JWT_EX const char *jwt_get_grant(jwt_t *jwt, const char *grant);
+
437
+
454JWT_EX long jwt_get_grant_int(jwt_t *jwt, const char *grant);
+
455
+
472JWT_EX int jwt_get_grant_bool(jwt_t *jwt, const char *grant);
+
473
+
487JWT_EX char *jwt_get_grants_json(jwt_t *jwt, const char *grant);
+
488
+
507JWT_EX int jwt_add_grant(jwt_t *jwt, const char *grant, const char *val);
+
508
+
526JWT_EX int jwt_add_grant_int(jwt_t *jwt, const char *grant, long val);
+
527
+
545JWT_EX int jwt_add_grant_bool(jwt_t *jwt, const char *grant, int val);
+
546
+
559JWT_EX int jwt_add_grants_json(jwt_t *jwt, const char *json);
+
560
+
573JWT_EX int jwt_del_grants(jwt_t *jwt, const char *grant);
+
574
+
600JWT_EX const char *jwt_get_header(jwt_t *jwt, const char *header);
+
601
+
618JWT_EX long jwt_get_header_int(jwt_t *jwt, const char *header);
+
619
+
636JWT_EX int jwt_get_header_bool(jwt_t *jwt, const char *header);
+
637
+
651JWT_EX char *jwt_get_headers_json(jwt_t *jwt, const char *header);
+
652
+
671JWT_EX int jwt_add_header(jwt_t *jwt, const char *header, const char *val);
+
672
+
690JWT_EX int jwt_add_header_int(jwt_t *jwt, const char *header, long val);
+
691
+
709JWT_EX int jwt_add_header_bool(jwt_t *jwt, const char *header, int val);
+
710
+
723JWT_EX int jwt_add_headers_json(jwt_t *jwt, const char *json);
+
724
+
737JWT_EX int jwt_del_headers(jwt_t *jwt, const char *header);
+
738
+
768JWT_EX int jwt_dump_fp(jwt_t *jwt, FILE *fp, int pretty);
+
769
+
788JWT_EX char *jwt_dump_str(jwt_t *jwt, int pretty);
+
789
+
802JWT_EX char *jwt_dump_grants_str(jwt_t *jwt, int pretty);
+
803
+
815JWT_EX int jwt_encode_fp(jwt_t *jwt, FILE *fp);
+
816
+
828JWT_EX char *jwt_encode_str(jwt_t *jwt);
+
829
+
836JWT_EX void jwt_free_str(char *str);
+
837
+
865JWT_EX int jwt_set_alg(jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len);
+
866
+
880JWT_EX jwt_alg_t jwt_get_alg(const jwt_t *jwt);
+
881
+
891JWT_EX const char *jwt_alg_str(jwt_alg_t alg);
+
892
+
906JWT_EX jwt_alg_t jwt_str_alg(const char *alg);
+
907
+
937JWT_EX jwk_set_t *jwks_create(const char *jwk_json_str);
+
938
+
946JWT_EX int jwks_item_add(jwk_set_t *jwk_set, jwk_item_t *item);
+
947
+
956JWT_EX int jwks_error(jwk_set_t *jwk_set);
+
957
+
965JWT_EX int jwks_error_any(jwk_set_t *jwk_set);
+
966
+
974JWT_EX const char *jwks_error_msg(jwk_set_t *jwk_set);
+
975
+
993JWT_EX jwk_item_t *jwks_item_get(jwk_set_t *jwk_set, size_t index);
+
994
+
1001JWT_EX void jwks_free(jwk_set_t *jwk_set);
+
1002
+
1010JWT_EX int jwks_item_free(jwk_set_t *jwk_set, size_t index);
+
1011
+
1019JWT_EX int jwks_item_free_all(jwk_set_t *jwk_set);
+
1020
+ +
1048
+
1061JWT_EX int jwt_valid_new(jwt_valid_t **jwt_valid, jwt_alg_t alg);
+
1062
+
1072JWT_EX void jwt_valid_free(jwt_valid_t *jwt_valid);
+
1073
+ +
1085
+
1092JWT_EX time_t jwt_valid_get_nbf_leeway(jwt_valid_t *jwt_valid);
+
1093
+
1100JWT_EX time_t jwt_valid_get_exp_leeway(jwt_valid_t *jwt_valid);
+
1101
+
1115JWT_EX int jwt_valid_add_grant(jwt_valid_t *jwt_valid, const char *grant, const char *val);
+
1116
+
1133JWT_EX const char *jwt_valid_get_grant(jwt_valid_t *jwt_valid, const char *grant);
+
1134
+
1147JWT_EX int jwt_valid_add_grant_int(jwt_valid_t *jwt_valid, const char *grant, long val);
+
1148
+
1165JWT_EX long jwt_valid_get_grant_int(jwt_valid_t *jwt_valid, const char *grant);
+
1166
+
1184JWT_EX int jwt_valid_add_grant_bool(jwt_valid_t *jwt_valid, const char *grant, int val);
+
1185
+
1202JWT_EX int jwt_valid_get_grant_bool(jwt_valid_t *jwt_valid, const char *grant);
+
1203
+
1214JWT_EX int jwt_valid_add_grants_json(jwt_valid_t *jwt_valid, const char *json);
+
1215
+
1228JWT_EX char* jwt_valid_get_grants_json(jwt_valid_t *jwt_valid, const char *grant);
+
1229
+
1242JWT_EX int jwt_valid_del_grants(jwt_valid_t *jwt_valid, const char *grant);
+
1243
+
1254JWT_EX int jwt_valid_set_now(jwt_valid_t *jwt_valid, const time_t now);
+
1255
+
1264JWT_EX int jwt_valid_set_nbf_leeway(jwt_valid_t *jwt_valid, const time_t nbf_leeway);
+
1265
+
1274JWT_EX int jwt_valid_set_exp_leeway(jwt_valid_t *jwt_valid, const time_t exp_leeway);
+
1275
+
1289JWT_EX int jwt_valid_set_headers(jwt_valid_t *jwt_valid, int hdr);
+
1290
+
1304JWT_EX char *jwt_exception_str(unsigned int exceptions);
+
1305
+
1343JWT_EX int jwt_set_alloc(jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree);
+
1344
+
1352JWT_EX void jwt_get_alloc(jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree);
+
1353
+
1381JWT_EX const char *jwt_get_crypto_ops(void);
+
1382
+ +
1389
+
1399JWT_EX int jwt_set_crypto_ops(const char *opname);
+
1400
+ +
1410
+ +
1417
+
1422#ifdef __cplusplus
+
1423}
+
1424#endif
+
1425
+
1426#endif /* JWT_H */
+
JWT_EX int jwks_item_add(jwk_set_t *jwk_set, jwk_item_t *item)
Add a jwk_item_t to an existing jwk_set_t.
+
jwk_key_op_t
Allowed key operations for JWK private keys.
Definition jwt.h:182
+
struct jwk_set jwk_set_t
Opaque JWKS object.
Definition jwt.h:87
+
JWT_EX int jwks_item_free(jwk_set_t *jwk_set, size_t index)
Free all memory associated with the nth jwt_item_t in a jwk_set.
+
jwk_key_type_t
JWK Key Types.
Definition jwt.h:148
+
JWT_EX void jwks_free(jwk_set_t *jwk_set)
Free all memory associated with a jwt_set_t, including any jwk_item_t in the set.
+
JWT_EX jwk_item_t * jwks_item_get(jwk_set_t *jwk_set, size_t index)
Return the index'th jwk_item in the jwk_set.
+
JWT_EX jwk_set_t * jwks_create(const char *jwk_json_str)
Create a new JWKS object for later use in validating JWTs.
+
JWT_EX int jwks_error(jwk_set_t *jwk_set)
Check if there is an error within the jwk_set.
+
JWT_EX int jwks_error_any(jwk_set_t *jwk_set)
Check if there is an error within the jwk_set and any of the jwk_item_t in the set.
+
jwk_pub_key_use_t
Usage types for JWK public keys.
Definition jwt.h:162
+
JWT_EX int jwks_item_free_all(jwk_set_t *jwk_set)
Free all memory associated with alljwt_item_t in a jwk_set.
+
JWT_EX const char * jwks_error_msg(jwk_set_t *jwk_set)
Retrieve an error message from a jwk_set.
+
@ JWK_KEY_OP_DERIVE_BITS
Bits derivation.
Definition jwt.h:191
+
@ JWK_KEY_OP_ENCRYPT
Used for encryption.
Definition jwt.h:186
+
@ JWK_KEY_OP_WRAP
For wrapping other keys.
Definition jwt.h:188
+
@ JWK_KEY_OP_UNWRAP
For unwrappng other keys.
Definition jwt.h:189
+
@ JWK_KEY_OP_VERIFY
Signature verification.
Definition jwt.h:185
+
@ JWK_KEY_OP_SIGN
Signing.
Definition jwt.h:184
+
@ JWK_KEY_OP_NONE
No key_op set.
Definition jwt.h:183
+
@ JWK_KEY_OP_DECRYPT
Used for decrypting.
Definition jwt.h:187
+
@ JWK_KEY_OP_DERIVE_KEY
Key derivation.
Definition jwt.h:190
+
@ JWK_KEY_OP_INVALID
Invalid key_ops in JWK.
Definition jwt.h:192
+
@ JWK_KEY_TYPE_NONE
Unused on valid keys.
Definition jwt.h:149
+
@ JWK_KEY_TYPE_OKP
Octet Key Pair (e.g.
Definition jwt.h:152
+
@ JWK_KEY_TYPE_EC
Eliptic Curve keys.
Definition jwt.h:150
+
@ JWK_KEY_TYPE_RSA
RSA keys (RSA and RSA-PSS)
Definition jwt.h:151
+
@ JWK_PUB_KEY_USE_SIG
Signature validation (JWS)
Definition jwt.h:164
+
@ JWK_PUB_KEY_USE_ENC
Decryption key (JWE)
Definition jwt.h:165
+
@ JWK_PUB_KEY_USE_NONE
No usable attribute was set.
Definition jwt.h:163
+
JWT_EX jwt_alg_t jwt_get_alg(const jwt_t *jwt)
Get the jwt_alg_t set for this JWT object.
+
JWT_EX jwt_alg_t jwt_str_alg(const char *alg)
Convert alg string to type.
+
JWT_EX int jwt_set_alg(jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len)
Set an algorithm for a jwt_t object.
+
JWT_EX const char * jwt_alg_str(jwt_alg_t alg)
Convert alg type to it's string representation.
+
JWT_EX jwt_t * jwt_dup(jwt_t *jwt)
Duplicate an existing JWT object.
+
JWT_EX int jwt_new(jwt_t **jwt)
Allocate a new, empty, JWT object.
+
jwt_alg_t
JWT algorithm types.
Definition jwt.h:105
+
struct jwt jwt_t
<
Definition jwt.h:68
+
JWT_EX void jwt_free(jwt_t *jwt)
Free a JWT object and any other resources it is using.
+
@ JWT_ALG_INVAL
An invalid algorithm from the caller or the token.
Definition jwt.h:121
+
@ JWT_ALG_NONE
No signature.
Definition jwt.h:106
+
@ JWT_ALG_PS384
RSASSA-PSS using SHA-384 and MGF1 with SHA-384.
Definition jwt.h:117
+
@ JWT_ALG_RS384
RSASSA-PKCS1-v1_5 using SHA-384.
Definition jwt.h:111
+
@ JWT_ALG_HS512
HMAC using SHA-512.
Definition jwt.h:109
+
@ JWT_ALG_PS512
RSASSA-PSS using SHA-512 and MGF1 with SHA-512.
Definition jwt.h:118
+
@ JWT_ALG_ES256K
ECDSA using secp256k1 and SHA-256.
Definition jwt.h:119
+
@ JWT_ALG_ES256
ECDSA using P-256 and SHA-256.
Definition jwt.h:113
+
@ JWT_ALG_ES512
ECDSA using P-521 and SHA-512.
Definition jwt.h:115
+
@ JWT_ALG_RS256
RSASSA-PKCS1-v1_5 using SHA-256.
Definition jwt.h:110
+
@ JWT_ALG_HS256
HMAC using SHA-256.
Definition jwt.h:107
+
@ JWT_ALG_EDDSA
EdDSA using Ed25519.
Definition jwt.h:120
+
@ JWT_ALG_RS512
RSASSA-PKCS1-v1_5 using SHA-512.
Definition jwt.h:112
+
@ JWT_ALG_PS256
RSASSA-PSS using SHA-256 and MGF1 with SHA-256.
Definition jwt.h:116
+
@ JWT_ALG_ES384
ECDSA using P-384 and SHA-384.
Definition jwt.h:114
+
@ JWT_ALG_HS384
HMAC using SHA-384.
Definition jwt.h:108
+
JWT_EX const char * jwt_get_crypto_ops(void)
Retrieve the name of the current crypto operations being used.
+
JWT_EX int jwt_crypto_ops_supports_jwk(void)
Check if the current crypto operations support JWK usage.
+
jwt_crypto_provider_t
Different providers for crypto operations.
Definition jwt.h:134
+
JWT_EX int jwt_set_crypto_ops_t(jwt_crypto_provider_t opname)
Set the crypto operations to a jwt_crypto_provider_t type.
+
JWT_EX jwt_crypto_provider_t jwt_get_crypto_ops_t(void)
Retrieve the type of the current crypto operations being used.
+
JWT_EX int jwt_set_crypto_ops(const char *opname)
Set the crypto operations to the named set.
+
@ JWT_CRYPTO_OPS_NONE
Used for error handling.
Definition jwt.h:135
+
@ JWT_CRYPTO_OPS_MBEDTLS
MBedTLS embedded library.
Definition jwt.h:138
+
@ JWT_CRYPTO_OPS_OPENSSL
OpenSSL Library.
Definition jwt.h:136
+
@ JWT_CRYPTO_OPS_GNUTLS
GnuTLS Library.
Definition jwt.h:137
+
JWT_EX int jwt_dump_fp(jwt_t *jwt, FILE *fp, int pretty)
Output plain text representation to a FILE pointer.
+
JWT_EX char * jwt_encode_str(jwt_t *jwt)
Fully encode a JWT object and return as a string.
+
JWT_EX int jwt_encode_fp(jwt_t *jwt, FILE *fp)
Fully encode a JWT object and write it to FILE.
+
JWT_EX char * jwt_dump_grants_str(jwt_t *jwt, int pretty)
Return plain text representation of grants as a string.
+
JWT_EX void jwt_free_str(char *str)
Free a string returned from the library.
+
JWT_EX char * jwt_dump_str(jwt_t *jwt, int pretty)
Return plain text representation as a string.
+
JWT_EX int jwt_add_grant_bool(jwt_t *jwt, const char *grant, int val)
Add a new boolean grant to this JWT object.
+
JWT_EX int jwt_add_grant_int(jwt_t *jwt, const char *grant, long val)
Add a new integer grant to this JWT object.
+
JWT_EX long jwt_get_grant_int(jwt_t *jwt, const char *grant)
Return the value of an integer grant.
+
JWT_EX int jwt_add_grant(jwt_t *jwt, const char *grant, const char *val)
Add a new string grant to this JWT object.
+
JWT_EX int jwt_del_grants(jwt_t *jwt, const char *grant)
Delete a grant from this JWT object.
+
JWT_EX const char * jwt_get_grant(jwt_t *jwt, const char *grant)
Return the value of a string grant.
+
JWT_EX int jwt_add_grants_json(jwt_t *jwt, const char *json)
Add grants from a JSON encoded object string.
+
JWT_EX int jwt_get_grant_bool(jwt_t *jwt, const char *grant)
Return the value of an boolean grant.
+
JWT_EX char * jwt_get_grants_json(jwt_t *jwt, const char *grant)
Return the value of a grant as JSON encoded object string.
+
JWT_EX char * jwt_get_headers_json(jwt_t *jwt, const char *header)
Return the value of a header as JSON encoded object string.
+
JWT_EX long jwt_get_header_int(jwt_t *jwt, const char *header)
Return the value of an integer header.
+
JWT_EX int jwt_add_headers_json(jwt_t *jwt, const char *json)
Add headers from a JSON encoded object string.
+
JWT_EX int jwt_get_header_bool(jwt_t *jwt, const char *header)
Return the value of an boolean header.
+
JWT_EX int jwt_add_header(jwt_t *jwt, const char *header, const char *val)
Add a new string header to this JWT object.
+
JWT_EX int jwt_del_headers(jwt_t *jwt, const char *header)
Delete a header from this JWT object.
+
JWT_EX int jwt_add_header_int(jwt_t *jwt, const char *header, long val)
Add a new integer header to this JWT object.
+
JWT_EX int jwt_add_header_bool(jwt_t *jwt, const char *header, int val)
Add a new boolean header to this JWT object.
+
JWT_EX const char * jwt_get_header(jwt_t *jwt, const char *header)
Return the value of a string header.
+
JWT_EX int jwt_set_alloc(jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree)
Set functions to be used for allocating and freeing memory.
+
void(* jwt_free_t)(void *)
Prototype for free(3)
Definition jwt.h:262
+
JWT_EX void jwt_get_alloc(jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree)
Get functions used for allocating and freeing memory.
+
void *(* jwt_malloc_t)(size_t)
Prototype for malloc(3)
Definition jwt.h:252
+
void *(* jwt_realloc_t)(void *, size_t)
Prototype for realloc(3)
Definition jwt.h:257
+
JWT_EX char * jwt_valid_get_grants_json(jwt_valid_t *jwt_valid, const char *grant)
Return the value of a grant as JSON encoded object string.
+
JWT_EX long jwt_valid_get_grant_int(jwt_valid_t *jwt_valid, const char *grant)
Return the value of an integer required grant.
+
JWT_EX int jwt_valid_get_grant_bool(jwt_valid_t *jwt_valid, const char *grant)
Return the value of an boolean required grant.
+
jwt_valid_exception_t
Validation exception types for jwt_t objects.
Definition jwt.h:236
+
JWT_EX char * jwt_exception_str(unsigned int exceptions)
Parses exceptions and returns a comma delimited and human-readable string.
+
JWT_EX void jwt_valid_free(jwt_valid_t *jwt_valid)
Free a JWT validation object and any other resources it is using.
+
JWT_EX int jwt_valid_set_exp_leeway(jwt_valid_t *jwt_valid, const time_t exp_leeway)
Set the exp_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4....
+
JWT_EX const char * jwt_valid_get_grant(jwt_valid_t *jwt_valid, const char *grant)
Return the value of a string required grant.
+
JWT_EX int jwt_valid_new(jwt_valid_t **jwt_valid, jwt_alg_t alg)
Allocate a new, JWT validation object.
+
JWT_EX int jwt_valid_add_grant_bool(jwt_valid_t *jwt_valid, const char *grant, int val)
Add a new boolean required grant to this JWT validation object.
+
JWT_EX int jwt_valid_set_now(jwt_valid_t *jwt_valid, const time_t now)
Set the time for which expires and not-before claims should be evaluated.
+
JWT_EX jwt_valid_exception_t jwt_validate(jwt_t *jwt, jwt_valid_t *jwt_valid)
Validate a JWT object with a validation object.
+
JWT_EX int jwt_valid_add_grants_json(jwt_valid_t *jwt_valid, const char *json)
Add required grants from a JSON encoded object string.
+
JWT_EX int jwt_valid_add_grant_int(jwt_valid_t *jwt_valid, const char *grant, long val)
Add a new integer grant requirement to this JWT validation object.
+
struct jwt_valid jwt_valid_t
Opaque JWT Validation object.
Definition jwt.h:75
+
JWT_EX int jwt_valid_set_nbf_leeway(jwt_valid_t *jwt_valid, const time_t nbf_leeway)
Set the nbf_leeway value as defined in: https://www.rfc-editor.org/rfc/rfc7519#section-4....
+
JWT_EX time_t jwt_valid_get_nbf_leeway(jwt_valid_t *jwt_valid)
Return the nbf_leeway value set.
+
JWT_EX time_t jwt_valid_get_exp_leeway(jwt_valid_t *jwt_valid)
Return the exp_leeway value set.
+
JWT_EX int jwt_valid_set_headers(jwt_valid_t *jwt_valid, int hdr)
Set validation for replicated claims in headers.
+
JWT_EX int jwt_valid_add_grant(jwt_valid_t *jwt_valid, const char *grant, const char *val)
Add a new string grant requirement to this JWT validation object.
+
JWT_EX int jwt_valid_del_grants(jwt_valid_t *jwt_valid, const char *grant)
Delete a grant from this JWT object.
+
JWT_EX jwt_valid_exception_t jwt_valid_get_status(jwt_valid_t *jwt_valid)
Return the status string for the validation object.
+
@ JWT_VALIDATION_ISS_MISMATCH
RFC-7519 Sec 4.1.1 "iss" Issuer
Definition jwt.h:242
+
@ JWT_VALIDATION_GRANT_MISMATCH
User-defined Grant mismatch
Definition jwt.h:246
+
@ JWT_VALIDATION_TOO_NEW
RFC-7519 Sec 4.1.5 "nbf" Not Before
Definition jwt.h:241
+
@ JWT_VALIDATION_EXPIRED
RFC-7519 Sec 4.1.4 "exp" Expired
Definition jwt.h:240
+
@ JWT_VALIDATION_SUCCESS
Validation succeeded
Definition jwt.h:237
+
@ JWT_VALIDATION_GRANT_MISSING
User-defined Grant missing
Definition jwt.h:245
+
@ JWT_VALIDATION_ALG_MISMATCH
RFC-7518 Sec 3.1 "alg" Algorithm
Definition jwt.h:239
+
@ JWT_VALIDATION_SUB_MISMATCH
RFC-7519 Sec 4.1.2 "sub" Subject
Definition jwt.h:243
+
@ JWT_VALIDATION_AUD_MISMATCH
RFC-7519 Sec 4.1.3 "aud" Audience
Definition jwt.h:244
+
@ JWT_VALIDATION_ERROR
General failures
Definition jwt.h:238
+
JWT_EX int jwt_verify(jwt_t **jwt, const char *token, jwt_verify_t *key_v)
+
JWT_EX DEPRECATED int jwt_decode_2(jwt_t **jwt, const char *token, jwt_key_p_t key_provider)
+
jwt_verify_p_t jwt_key_p_t
Backward compatibility for jwt_decode_2.
Definition jwt.h:388
+
JWT_EX DEPRECATED int jwt_decode(jwt_t **jwt, const char *token, const unsigned char *key, int key_len)
+
jwt_verify_t jwt_key_t
Backward compatibility for jwt_decode_2.
Definition jwt.h:357
+
int(* jwt_verify_p_t)(const jwt_t *, jwt_verify_t *)
Prototype of the key provider callback.
Definition jwt.h:383
+
JWT_EX int jwt_verify_wcb(jwt_t **jwt, const char *token, jwt_verify_t *key_v, jwt_key_p_t key_provider)
+
Structural representation of a JWK.
Definition jwt.h:211
+
size_t bits
The number of bits in the key (may be 0)
Definition jwt.h:218
+
jwk_key_op_t key_ops
Bitwise flags of "key_ops" supported for this key
Definition jwt.h:222
+
int is_private_key
Whether this is a public or private key
Definition jwt.h:216
+
void * provider_data
Internal data used by the provider
Definition jwt.h:215
+
char * kid
RFC-7517 Sec 4.5
Definition jwt.h:224
+
jwk_pub_key_use_t use
Value of the JWK "use" attribute
Definition jwt.h:221
+
jwt_crypto_provider_t provider
Crypto provider that owns this key
Definition jwt.h:214
+
jwt_alg_t alg
Valid "alg" that this key can be used for
Definition jwt.h:223
+
jwk_key_type_t kty
The key type of this key
Definition jwt.h:212
+
int error
Shows there is an error present in this key (unusable)
Definition jwt.h:219
+
char * pem
If not NULL, contains PEM string of this key
Definition jwt.h:213
+
Used to manage keys for verifying a JWT.
Definition jwt.h:347
+
jwt_alg_t alg
For algorithm matching
Definition jwt.h:350
+
void * ctx
User controlled context
Definition jwt.h:351
+
int jwt_key_len
Length of key material
Definition jwt.h:349
+
const void * jwt_key
Pointer to key material
Definition jwt.h:348
+
+
+ + + + + diff --git a/HEAD/libjwt.css b/HEAD/libjwt.css new file mode 100644 index 00000000..3ed9915e --- /dev/null +++ b/HEAD/libjwt.css @@ -0,0 +1,19 @@ +a.button { + background-color: #EFF4FF; + border: none; + color: #2557D6; + padding: 10px 20px; + text-align: center; + text-decoration: none; + display: inline-block; + margin-right: 13px; + margin-left: -1px; + margin-bottom: 10px; + border-radius: 100px; + cursor: pointer; + transition: box-shadow 0.5s ease; +} + +a.button:hover { + box-shadow: inset 0em 0em 0em 10em #DCE6FF; +} diff --git a/HEAD/menu.js b/HEAD/menu.js new file mode 100644 index 00000000..0fd1e990 --- /dev/null +++ b/HEAD/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/HEAD/menudata.js b/HEAD/menudata.js new file mode 100644 index 00000000..dfbedd82 --- /dev/null +++ b/HEAD/menudata.js @@ -0,0 +1,45 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Topics",url:"topics.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"j",url:"globals.html#index_j"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"j",url:"globals_func.html#index_j"}]}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"j",url:"globals_eval.html#index_j"}]}]}]}]} diff --git a/HEAD/minus.svg b/HEAD/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/HEAD/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/HEAD/minusd.svg b/HEAD/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/HEAD/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/HEAD/nav_f.png b/HEAD/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/HEAD/nav_f.png differ diff --git a/HEAD/nav_fd.png b/HEAD/nav_fd.png new file mode 100644 index 00000000..032fbdd4 Binary files /dev/null and b/HEAD/nav_fd.png differ diff --git a/HEAD/nav_g.png b/HEAD/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/HEAD/nav_g.png differ diff --git a/HEAD/nav_h.png b/HEAD/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/HEAD/nav_h.png differ diff --git a/HEAD/nav_hd.png b/HEAD/nav_hd.png new file mode 100644 index 00000000..de80f18a Binary files /dev/null and b/HEAD/nav_hd.png differ diff --git a/HEAD/navtree.css b/HEAD/navtree.css new file mode 100644 index 00000000..6b1e5e46 --- /dev/null +++ b/HEAD/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/HEAD/navtree.js b/HEAD/navtree.js new file mode 100644 index 00000000..9027ce6a --- /dev/null +++ b/HEAD/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + +LibJWT: Related Pages + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    LibJWT v2.1.0 +
    +
    The C JSON Web Token Library +JWK +JWKS
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    +
    + + + + + diff --git a/HEAD/plus.svg b/HEAD/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/HEAD/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/HEAD/plusd.svg b/HEAD/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/HEAD/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/HEAD/resize.js b/HEAD/resize.js new file mode 100644 index 00000000..178d03bc --- /dev/null +++ b/HEAD/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/HEAD/splitbar.png b/HEAD/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/HEAD/splitbar.png differ diff --git a/HEAD/splitbard.png b/HEAD/splitbard.png new file mode 100644 index 00000000..8367416d Binary files /dev/null and b/HEAD/splitbard.png differ diff --git a/HEAD/structjwk__item__t.html b/HEAD/structjwk__item__t.html new file mode 100644 index 00000000..60eed073 --- /dev/null +++ b/HEAD/structjwk__item__t.html @@ -0,0 +1,429 @@ + + + + + + + + +LibJWT: jwk_item_t Struct Reference + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    LibJWT v2.1.0 +
    +
    The C JSON Web Token Library +JWK +JWKS
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    jwk_item_t Struct Reference
    +
    +
    + +

    Structural representation of a JWK. + More...

    + +

    #include <jwt.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    jwk_key_type_t kty
     The key type of this key
    +
     
    char * pem
     If not NULL, contains PEM string of this key
    +
     
    jwt_crypto_provider_t provider
     Crypto provider that owns this key
    +
     
    void * provider_data
     Internal data used by the provider
    +
     
    int is_private_key
     Whether this is a public or private key
    +
     
    char curve [256]
     Curve name of an "EC" or "OKP" key
    +
     
    size_t bits
     The number of bits in the key (may be 0)
    +
     
    int error
     Shows there is an error present in this key (unusable)
    +
     
    char error_msg [256]
     Descriptive message for jwk_item_t::error
    +
     
    jwk_pub_key_use_t use
     Value of the JWK "use" attribute
    +
     
    jwk_key_op_t key_ops
     Bitwise flags of "key_ops" supported for this key
    +
     
    jwt_alg_t alg
     Valid "alg" that this key can be used for
    +
     
    char * kid
      RFC-7517 Sec 4.5
    +
     
    +

    Detailed Description

    +

    Structural representation of a JWK.

    +

    This data structure is produced by importing a JWK or JWKS into a jwk_set_t object. Generally, you would not change any values here and only use this to probe the internal parser and possibly to decide whether a key applies to certain jwt_t for verification or signing.

    +
    Remarks
    If the jwk_item_t::pem field is not NULL, then it contains a nil terminated string of the key. The underlying crypto algorith may or may not support this. It's provided as a convenience.
    +
    Todo
    Decide whether to keep this public or opaque. It's super dangerous.
    + +

    Definition at line 211 of file jwt.h.

    +

    Field Documentation

    + +

    ◆ alg

    + +
    +
    + + + + +
    jwt_alg_t jwk_item_t::alg
    +
    + +

    Valid "alg" that this key can be used for
    +

    + +

    Definition at line 223 of file jwt.h.

    + +
    +
    + +

    ◆ bits

    + +
    +
    + + + + +
    size_t jwk_item_t::bits
    +
    + +

    The number of bits in the key (may be 0)
    +

    + +

    Definition at line 218 of file jwt.h.

    + +
    +
    + +

    ◆ curve

    + +
    +
    + + + + +
    char jwk_item_t::curve[256]
    +
    + +

    Curve name of an "EC" or "OKP" key
    +

    + +

    Definition at line 217 of file jwt.h.

    + +
    +
    + +

    ◆ error

    + +
    +
    + + + + +
    int jwk_item_t::error
    +
    + +

    Shows there is an error present in this key (unusable)
    +

    + +

    Definition at line 219 of file jwt.h.

    + +
    +
    + +

    ◆ error_msg

    + +
    +
    + + + + +
    char jwk_item_t::error_msg[256]
    +
    + +

    Descriptive message for jwk_item_t::error
    +

    + +

    Definition at line 220 of file jwt.h.

    + +
    +
    + +

    ◆ is_private_key

    + +
    +
    + + + + +
    int jwk_item_t::is_private_key
    +
    + +

    Whether this is a public or private key
    +

    + +

    Definition at line 216 of file jwt.h.

    + +
    +
    + +

    ◆ key_ops

    + +
    +
    + + + + +
    jwk_key_op_t jwk_item_t::key_ops
    +
    + +

    Bitwise flags of "key_ops" supported for this key
    +

    + +

    Definition at line 222 of file jwt.h.

    + +
    +
    + +

    ◆ kid

    + +
    +
    + + + + +
    char* jwk_item_t::kid
    +
    + +

    RFC-7517 Sec 4.5
    +

    + +

    Definition at line 224 of file jwt.h.

    + +
    +
    + +

    ◆ kty

    + +
    +
    + + + + +
    jwk_key_type_t jwk_item_t::kty
    +
    + +

    The key type of this key
    +

    + +

    Definition at line 212 of file jwt.h.

    + +
    +
    + +

    ◆ pem

    + +
    +
    + + + + +
    char* jwk_item_t::pem
    +
    + +

    If not NULL, contains PEM string of this key
    +

    + +

    Definition at line 213 of file jwt.h.

    + +
    +
    + +

    ◆ provider

    + +
    +
    + + + + +
    jwt_crypto_provider_t jwk_item_t::provider
    +
    + +

    Crypto provider that owns this key
    +

    + +

    Definition at line 214 of file jwt.h.

    + +
    +
    + +

    ◆ provider_data

    + +
    +
    + + + + +
    void* jwk_item_t::provider_data
    +
    + +

    Internal data used by the provider
    +

    + +

    Definition at line 215 of file jwt.h.

    + +
    +
    + +

    ◆ use

    + +
    +
    + + + + +
    jwk_pub_key_use_t jwk_item_t::use
    +
    + +

    Value of the JWK "use" attribute
    +

    + +

    Definition at line 221 of file jwt.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + + diff --git a/HEAD/structjwk__item__t.js b/HEAD/structjwk__item__t.js new file mode 100644 index 00000000..ebe48921 --- /dev/null +++ b/HEAD/structjwk__item__t.js @@ -0,0 +1,16 @@ +var structjwk__item__t = +[ + [ "alg", "structjwk__item__t.html#aae5092f40a4bfbe9155ddde65f5b933f", null ], + [ "bits", "structjwk__item__t.html#a2a87bc6fcdbdbd234f1beee3ba63ea61", null ], + [ "curve", "structjwk__item__t.html#a3840bd4c87181411e0f3012c020787b3", null ], + [ "error", "structjwk__item__t.html#ae5aef5762e38fc66625cedc461a32ece", null ], + [ "error_msg", "structjwk__item__t.html#a2840975767dbdc020912682c06ebdb75", null ], + [ "is_private_key", "structjwk__item__t.html#a58ab0832602b475e7c3a7009925db87e", null ], + [ "key_ops", "structjwk__item__t.html#a44fe44eb2d9c9466c48f19cd5f590e21", null ], + [ "kid", "structjwk__item__t.html#a874da82b485b8c541ecd0f3f8fd12a0f", null ], + [ "kty", "structjwk__item__t.html#ae2d7fed09d97d0ac3e6571e7c897d580", null ], + [ "pem", "structjwk__item__t.html#afecd2ad6ce52bf49a202999c184a9b2e", null ], + [ "provider", "structjwk__item__t.html#a892ffdca6722b35e24d885f01edd6679", null ], + [ "provider_data", "structjwk__item__t.html#a6cf519323148008f4549798d7df1d8f3", null ], + [ "use", "structjwk__item__t.html#a8790b92f608e12757ba07dff49b931df", null ] +]; \ No newline at end of file diff --git a/HEAD/structjwt__verify__t.html b/HEAD/structjwt__verify__t.html new file mode 100644 index 00000000..57fa5239 --- /dev/null +++ b/HEAD/structjwt__verify__t.html @@ -0,0 +1,219 @@ + + + + + + + + +LibJWT: jwt_verify_t Struct Reference + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    LibJWT v2.1.0 +
    +
    The C JSON Web Token Library +JWK +JWKS
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    + +
    jwt_verify_t Struct Reference
    +
    +
    + +

    Used to manage keys for verifying a JWT. + More...

    + +

    #include <jwt.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    const void * jwt_key
     Pointer to key material
    +
     
    int jwt_key_len
     Length of key material
    +
     
    jwt_alg_t alg
     For algorithm matching
    +
     
    void * ctx
     User controlled context
    +
     
    +

    Detailed Description

    +

    Used to manage keys for verifying a JWT.

    + +

    Definition at line 347 of file jwt.h.

    +

    Field Documentation

    + +

    ◆ alg

    + +
    +
    + + + + +
    jwt_alg_t jwt_verify_t::alg
    +
    + +

    For algorithm matching
    +

    + +

    Definition at line 350 of file jwt.h.

    + +
    +
    + +

    ◆ ctx

    + +
    +
    + + + + +
    void* jwt_verify_t::ctx
    +
    + +

    User controlled context
    +

    + +

    Definition at line 351 of file jwt.h.

    + +
    +
    + +

    ◆ jwt_key

    + +
    +
    + + + + +
    const void* jwt_verify_t::jwt_key
    +
    + +

    Pointer to key material
    +

    + +

    Definition at line 348 of file jwt.h.

    + +
    +
    + +

    ◆ jwt_key_len

    + +
    +
    + + + + +
    int jwt_verify_t::jwt_key_len
    +
    + +

    Length of key material
    +

    + +

    Definition at line 349 of file jwt.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + + diff --git a/HEAD/structjwt__verify__t.js b/HEAD/structjwt__verify__t.js new file mode 100644 index 00000000..1a287f7b --- /dev/null +++ b/HEAD/structjwt__verify__t.js @@ -0,0 +1,7 @@ +var structjwt__verify__t = +[ + [ "alg", "structjwt__verify__t.html#a8d845c20b0bf4b5c3162b353cd2c9aab", null ], + [ "ctx", "structjwt__verify__t.html#ac1f010c54d3de46721c309adbd31cd1d", null ], + [ "jwt_key", "structjwt__verify__t.html#aef95f32fbe0aee6b891100acf16cb969", null ], + [ "jwt_key_len", "structjwt__verify__t.html#ad5b397e828bc1d4cb9d833a54a035725", null ] +]; \ No newline at end of file diff --git a/HEAD/sync_off.png b/HEAD/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/HEAD/sync_off.png differ diff --git a/HEAD/sync_on.png b/HEAD/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/HEAD/sync_on.png differ diff --git a/HEAD/tab_a.png b/HEAD/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/HEAD/tab_a.png differ diff --git a/HEAD/tab_ad.png b/HEAD/tab_ad.png new file mode 100644 index 00000000..e34850ac Binary files /dev/null and b/HEAD/tab_ad.png differ diff --git a/HEAD/tab_b.png b/HEAD/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/HEAD/tab_b.png differ diff --git a/HEAD/tab_bd.png b/HEAD/tab_bd.png new file mode 100644 index 00000000..91c25249 Binary files /dev/null and b/HEAD/tab_bd.png differ diff --git a/HEAD/tab_h.png b/HEAD/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/HEAD/tab_h.png differ diff --git a/HEAD/tab_hd.png b/HEAD/tab_hd.png new file mode 100644 index 00000000..2489273d Binary files /dev/null and b/HEAD/tab_hd.png differ diff --git a/HEAD/tab_s.png b/HEAD/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/HEAD/tab_s.png differ diff --git a/HEAD/tab_sd.png b/HEAD/tab_sd.png new file mode 100644 index 00000000..757a565c Binary files /dev/null and b/HEAD/tab_sd.png differ diff --git a/HEAD/tabs.css b/HEAD/tabs.css new file mode 100644 index 00000000..edbb4241 --- /dev/null +++ b/HEAD/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} diff --git a/HEAD/todo.html b/HEAD/todo.html new file mode 100644 index 00000000..87d49d37 --- /dev/null +++ b/HEAD/todo.html @@ -0,0 +1,117 @@ + + + + + + + + +LibJWT: Todo List + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    LibJWT v2.1.0 +
    +
    The C JSON Web Token Library +JWK +JWKS
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    Todo List
    +
    +
    +
    +
    Struct jwk_item_t
    +
    Decide whether to keep this public or opaque. It's super dangerous.
    +
    Global jwt_valid_exception_t
    +

    RFC-7519 Sec 4.1.6 "iat" Issued At

    +

    +

    RFC-7519 Sec 4.1.7 "jti" JWT ID

    +
    +
    +
    +
    +
    + + + + + diff --git a/HEAD/topics.html b/HEAD/topics.html new file mode 100644 index 00000000..2714494a --- /dev/null +++ b/HEAD/topics.html @@ -0,0 +1,123 @@ + + + + + + + + +LibJWT: Topics + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    LibJWT v2.1.0 +
    +
    The C JSON Web Token Library +JWK +JWKS
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    Topics
    +
    +
    +
    Here is a list of all topics with brief descriptions:
    +
    [detail level 12]
    + + + + + + + + + + + + +
     JSON Web Token
     Object CreationFunctions used to create and destroy JWT objects
     Token VerificationFunctions used to decode and verify signatures for a JWT
     Grant ManagementThese functions allow you to add, remove and retrieve grants from a JWT object
     Header HanagementThese functions allow you to add, remove and retrieve headers from a JWT object
     Encoding and OutputFunctions for encoding a valid JWT optionally (but preferably) using JWA operation such as sigining or encryption
     Algorithm ManagementSet and check algorithms and algorithm specific values
     Validation FunctionsThese functions allow you to define requirements for JWT validation
     JSON Web Key and SetsFunctions to handle JSON that represents JWK and JWKS for use in validating JWT objects
     Advanced Functionality
     Memory HandlersThese functions allow you to get or set memory allocation functions
     Cryptographic OperationsFunctions used to set and get which crypto operations are used
    +
    +
    +
    + + + + + diff --git a/HEAD/topics.js b/HEAD/topics.js new file mode 100644 index 00000000..f9a1c599 --- /dev/null +++ b/HEAD/topics.js @@ -0,0 +1,6 @@ +var topics = +[ + [ "JSON Web Token", "group__jwt__grp.html", "group__jwt__grp" ], + [ "JSON Web Key and Sets", "group__jwks__core__grp.html", "group__jwks__core__grp" ], + [ "Advanced Functionality", "group__advanced__grp.html", "group__advanced__grp" ] +]; \ No newline at end of file