Browse Source

Import upstream version 11

Sergio Correia 3 years ago
parent
commit
99d9a8b74b
100 changed files with 10366 additions and 32079 deletions
  1. 14 0
      .packit.yaml
  2. 34 0
      .travis.docker
  3. 52 0
      .travis.install
  4. 30 0
      .travis.script
  5. 40 0
      .travis.yml
  6. 0 4
      Makefile.am
  7. 0 860
      Makefile.in
  8. 134 0
      README.md
  9. 0 10528
      aclocal.m4
  10. 0 27
      cmd/Makefile.am
  11. 0 735
      cmd/Makefile.in
  12. 4 1
      cmd/jwe/pwd.h
  13. 1 1
      cmd/jwk/thp.c
  14. 27 0
      cmd/meson.build
  15. 0 348
      compile
  16. 0 1476
      config.guess
  17. 0 1836
      config.sub
  18. 0 14785
      configure
  19. 0 65
      configure.ac
  20. 0 791
      depcomp
  21. 0 28
      doc/Makefile.am
  22. 0 594
      doc/Makefile.in
  23. 2473 0
      doc/doxygen/Doxyfile
  24. 78 0
      doc/doxygen/html/annotated.html
  25. 86 0
      doc/doxygen/html/b64_8h_source.html
  26. BIN
      doc/doxygen/html/bc_s.png
  27. BIN
      doc/doxygen/html/bdwn.png
  28. 84 0
      doc/doxygen/html/cfg_8h_source.html
  29. 82 0
      doc/doxygen/html/classes.html
  30. BIN
      doc/doxygen/html/closed.png
  31. 77 0
      doc/doxygen/html/dir_f2bd36b8a3f3d476e48bdb5015c9fdfb.html
  32. BIN
      doc/doxygen/html/doc.png
  33. 1596 0
      doc/doxygen/html/doxygen.css
  34. BIN
      doc/doxygen/html/doxygen.png
  35. 97 0
      doc/doxygen/html/dynsections.js
  36. BIN
      doc/doxygen/html/folderclosed.png
  37. BIN
      doc/doxygen/html/folderopen.png
  38. 77 0
      doc/doxygen/html/functions.html
  39. 77 0
      doc/doxygen/html/functions_vars.html
  40. 412 0
      doc/doxygen/html/group__jose__b64.html
  41. 331 0
      doc/doxygen/html/group__jose__cfg.html
  42. 406 0
      doc/doxygen/html/group__jose__io.html
  43. 831 0
      doc/doxygen/html/group__jose__jwe.html
  44. 419 0
      doc/doxygen/html/group__jose__jwk.html
  45. 395 0
      doc/doxygen/html/group__jose__jws.html
  46. 85 0
      doc/doxygen/html/index.html
  47. 86 0
      doc/doxygen/html/io_8h_source.html
  48. 77 0
      doc/doxygen/html/jose_8h_source.html
  49. 87 0
      doc/doxygen/html/jquery.js
  50. 89 0
      doc/doxygen/html/jwe_8h_source.html
  51. 83 0
      doc/doxygen/html/jwk_8h_source.html
  52. 83 0
      doc/doxygen/html/jws_8h_source.html
  53. 77 0
      doc/doxygen/html/jwt_8h_source.html
  54. 26 0
      doc/doxygen/html/menu.js
  55. 9 0
      doc/doxygen/html/menudata.js
  56. 83 0
      doc/doxygen/html/modules.html
  57. BIN
      doc/doxygen/html/nav_f.png
  58. BIN
      doc/doxygen/html/nav_g.png
  59. BIN
      doc/doxygen/html/nav_h.png
  60. BIN
      doc/doxygen/html/open.png
  61. 77 0
      doc/doxygen/html/openssl_8h_source.html
  62. 26 0
      doc/doxygen/html/search/all_0.html
  63. 4 0
      doc/doxygen/html/search/all_0.js
  64. 26 0
      doc/doxygen/html/search/all_1.html
  65. 4 0
      doc/doxygen/html/search/all_1.js
  66. 26 0
      doc/doxygen/html/search/all_2.html
  67. 4 0
      doc/doxygen/html/search/all_2.js
  68. 26 0
      doc/doxygen/html/search/all_3.html
  69. 4 0
      doc/doxygen/html/search/all_3.js
  70. 26 0
      doc/doxygen/html/search/all_4.html
  71. 4 0
      doc/doxygen/html/search/all_4.js
  72. 26 0
      doc/doxygen/html/search/all_5.html
  73. 53 0
      doc/doxygen/html/search/all_5.js
  74. 26 0
      doc/doxygen/html/search/classes_0.html
  75. 4 0
      doc/doxygen/html/search/classes_0.js
  76. BIN
      doc/doxygen/html/search/close.png
  77. 26 0
      doc/doxygen/html/search/functions_0.html
  78. 46 0
      doc/doxygen/html/search/functions_0.js
  79. 26 0
      doc/doxygen/html/search/groups_0.html
  80. 4 0
      doc/doxygen/html/search/groups_0.js
  81. 26 0
      doc/doxygen/html/search/groups_1.html
  82. 4 0
      doc/doxygen/html/search/groups_1.js
  83. 26 0
      doc/doxygen/html/search/groups_2.html
  84. 4 0
      doc/doxygen/html/search/groups_2.js
  85. 26 0
      doc/doxygen/html/search/groups_3.html
  86. 6 0
      doc/doxygen/html/search/groups_3.js
  87. BIN
      doc/doxygen/html/search/mag_sel.png
  88. 12 0
      doc/doxygen/html/search/nomatches.html
  89. 26 0
      doc/doxygen/html/search/pages_0.html
  90. 4 0
      doc/doxygen/html/search/pages_0.js
  91. 271 0
      doc/doxygen/html/search/search.css
  92. 791 0
      doc/doxygen/html/search/search.js
  93. BIN
      doc/doxygen/html/search/search_l.png
  94. BIN
      doc/doxygen/html/search/search_m.png
  95. BIN
      doc/doxygen/html/search/search_r.png
  96. 33 0
      doc/doxygen/html/search/searchdata.js
  97. 26 0
      doc/doxygen/html/search/typedefs_0.html
  98. 5 0
      doc/doxygen/html/search/typedefs_0.js
  99. 26 0
      doc/doxygen/html/search/variables_0.html
  100. 0 0
      doc/doxygen/html/search/variables_0.js

+ 14 - 0
.packit.yaml

@@ -0,0 +1,14 @@
+downstream_package_name: jose
+jobs:
+- job: copr_build
+  metadata:
+    targets:
+    - fedora-30-x86_64
+    - fedora-31-x86_64
+    - fedora-rawhide-x86_64
+  trigger: pull_request
+specfile_path: jose.spec
+synced_files:
+- jose.spec
+- .packit.yaml
+upstream_package_name: jose

+ 34 - 0
.travis.docker

@@ -0,0 +1,34 @@
+#!/bin/bash -ex
+
+case "$1" in
+  before_install)
+    if [ "$TRAVIS_OS_NAME" == "linux" ]; then
+      docker create \
+        --name=$TRAVIS_COMMIT -t \
+        -v `pwd`:/tmp/build \
+        -w /tmp/build \
+        $DISTRO /bin/cat
+      docker start $TRAVIS_COMMIT
+    fi
+    ;;
+
+  after_script)
+    if [ "$TRAVIS_OS_NAME" == "linux" ]; then
+      docker kill $TRAVIS_COMMIT
+      docker rm $TRAVIS_COMMIT
+    fi
+    ;;
+
+  *)
+    if [ -x ./.travis.$1 ]; then
+      if [ "$TRAVIS_OS_NAME" == "linux" ]; then
+          docker exec \
+            `bash <(curl -s https://codecov.io/env)` \
+            -e CC -e DISTRO \
+            $TRAVIS_COMMIT ./.travis.$1
+      else
+          ./.travis.$1
+      fi
+    fi
+    ;;
+esac

+ 52 - 0
.travis.install

@@ -0,0 +1,52 @@
+#!/bin/bash -ex
+
+COMMON="meson curl git make file bzip2 $CC"
+
+case "$DISTRO" in
+  osx:*)
+    brew update
+    for pkg in jansson openssl zlib meson; do
+        brew ls --versions $pkg || brew install $pkg
+        brew outdated $pkg || brew upgrade $pkg || true
+    done
+    ;;
+
+  debian:*|ubuntu:*)
+    # This solves an intermittant error when fetching packages on debian
+    sed -i 's|httpredir.debian.org|ftp.us.debian.org|g' /etc/apt/sources.list
+
+    apt-get clean
+
+    while ! apt-get update; do
+        sleep 5
+    done
+
+    while ! apt-get -y \
+        -o Dpkg::Options::="--force-confdef" \
+        -o Dpkg::Options::="--force-confnew" \
+        dist-upgrade; do
+        sleep 5
+    done
+
+    while ! apt-get -y install $COMMON \
+        build-essential pkg-config libssl-dev zlib1g-dev libjansson-dev; do
+        sleep 5
+    done
+    ;;
+
+  fedora:*)
+    dnf -y clean all
+    dnf -y --setopt=deltarpm=0 update
+    dnf -y install $COMMON pkgconfig openssl-devel zlib-devel jansson-devel findutils
+    ;;
+
+  centos:*)
+    yum -y clean all
+    yum -y --setopt=deltarpm=0 update
+    yum install -y yum-utils
+    yum config-manager -y --set-enabled PowerTools
+    yum -y install epel-release
+    yum -y install $COMMON pkgconfig openssl-devel zlib-devel jansson-devel findutils gcc
+    sed -i 's|>=1\.0\.2|>=1\.0\.1|' meson.build
+    ;;
+esac

+ 30 - 0
.travis.script

@@ -0,0 +1,30 @@
+#!/bin/bash -ex
+
+function findexe() {
+  while [ $# -gt 0 ]; do
+    while read -d: path; do
+        [ -f "$path/$1" -a -x "$path/$1" ] && echo "$path/$1" && return 0
+    done <<< "$PATH:"
+    shift
+  done
+  return 1
+}
+
+LC_ALL=`locale -a | grep -i '^en_US\.utf'` || LC_ALL=`locale -a | grep -i '^c\.utf'`
+export LC_ALL
+
+mkdir build
+cd build
+
+export CFLAGS="-g -coverage"
+
+if ! meson ..; then
+  cat meson-logs/meson-log.txt >&2
+  exit 1
+fi
+
+ninja=`findexe ninja ninja-build`
+"$ninja" test
+
+bash <(curl -s https://codecov.io/bash) 2>&1 \
+  | egrep -v "has arcs (to entry|from exit) block"

+ 40 - 0
.travis.yml

@@ -0,0 +1,40 @@
+sudo: required
+arch:
+  - amd64
+  - ppc64le
+os: linux
+language: c
+compiler:
+  - clang
+  - gcc
+
+services: docker
+
+matrix:
+  include:
+    - osx_image: xcode9.3
+      compiler: clang
+      os: osx
+      env:
+        - DISTRO=osx:xcode9.3
+        - PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig
+    - osx_image: xcode8.3
+      compiler: clang
+      os: osx
+      env:
+        - DISTRO=osx:xcode8.3
+        - PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig
+
+env:
+  matrix:
+    - DISTRO=fedora:rawhide
+    - DISTRO=fedora:latest
+    - DISTRO=centos:latest
+    - DISTRO=debian:unstable
+    - DISTRO=debian:testing
+    - DISTRO=ubuntu:devel
+
+before_install: ./.travis.docker before_install
+install: ./.travis.docker install
+script: ./.travis.docker script
+after_script: ./.travis.docker after_script

+ 0 - 4
Makefile.am

@@ -1,4 +0,0 @@
-SUBDIRS = . jose lib cmd tests doc
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = jose.pc

+ 0 - 860
Makefile.in

@@ -1,860 +0,0 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
-	$(am__configure_deps) $(am__DIST_COMMON)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES = jose.pc
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-	ctags-recursive dvi-recursive html-recursive info-recursive \
-	install-data-recursive install-dvi-recursive \
-	install-exec-recursive install-html-recursive \
-	install-info-recursive install-pdf-recursive \
-	install-ps-recursive install-recursive installcheck-recursive \
-	installdirs-recursive pdf-recursive ps-recursive \
-	tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-DATA = $(pkgconfig_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-	cscope distdir dist dist-all distcheck
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/jose.pc.in COPYING \
-	compile config.guess config.sub install-sh ltmain.sh missing
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-GZIP_ENV = --best
-DIST_ARCHIVES = $(distdir).tar.bz2
-DIST_TARGETS = dist-bzip2
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-JOSE_CFLAGS = @JOSE_CFLAGS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-jansson_CFLAGS = @jansson_CFLAGS@
-jansson_LIBS = @jansson_LIBS@
-libcrypto_CFLAGS = @libcrypto_CFLAGS@
-libcrypto_LIBS = @libcrypto_LIBS@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-zlib_CFLAGS = @zlib_CFLAGS@
-zlib_LIBS = @zlib_LIBS@
-SUBDIRS = . jose lib cmd tests doc
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = jose.pc
-all: all-recursive
-
-.SUFFIXES:
-am--refresh: Makefile
-	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    echo ' $(SHELL) ./config.status'; \
-	    $(SHELL) ./config.status;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	$(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-jose.pc: $(top_builddir)/config.status $(srcdir)/jose.pc.in
-	cd $(top_builddir) && $(SHELL) ./config.status $@
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-distclean-libtool:
-	-rm -f libtool config.lt
-install-pkgconfigDATA: $(pkgconfig_DATA)
-	@$(NORMAL_INSTALL)
-	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
-	fi; \
-	for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; \
-	done | $(am__base_list) | \
-	while read files; do \
-	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
-	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
-	done
-
-uninstall-pkgconfigDATA:
-	@$(NORMAL_UNINSTALL)
-	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-	@fail=; \
-	if $(am__make_keepgoing); then \
-	  failcom='fail=yes'; \
-	else \
-	  failcom='exit 1'; \
-	fi; \
-	dot_seen=no; \
-	target=`echo $@ | sed s/-recursive//`; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	for subdir in $$list; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    dot_seen=yes; \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done; \
-	if test "$$dot_seen" = "no"; then \
-	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-	fi; test -z "$$fail"
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-	  include_option=--etags-include; \
-	  empty_fix=.; \
-	else \
-	  include_option=--include; \
-	  empty_fix=; \
-	fi; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    test ! -f $$subdir/TAGS || \
-	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-	  fi; \
-	done; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscope: cscope.files
-	test ! -s cscope.files \
-	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-clean-cscope:
-	-rm -f cscope.files
-cscope.files: clean-cscope cscopelist
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-	$(am__remove_distdir)
-	test -d "$(distdir)" || mkdir "$(distdir)"
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
-	    $(am__make_dryrun) \
-	      || test -d "$(distdir)/$$subdir" \
-	      || $(MKDIR_P) "$(distdir)/$$subdir" \
-	      || exit 1; \
-	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-	    $(am__relativize); \
-	    new_distdir=$$reldir; \
-	    dir1=$$subdir; dir2="$(top_distdir)"; \
-	    $(am__relativize); \
-	    new_top_distdir=$$reldir; \
-	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-	    ($(am__cd) $$subdir && \
-	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$new_top_distdir" \
-	        distdir="$$new_distdir" \
-		am__remove_distdir=: \
-		am__skip_length_check=: \
-		am__skip_mode_fix=: \
-	        distdir) \
-	      || exit 1; \
-	  fi; \
-	done
-	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -755 \
-		-exec chmod u+rwx,go+rx {} \; -o \
-	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-	tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
-	$(am__post_remove_distdir)
-dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__post_remove_distdir)
-
-dist-lzip: distdir
-	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__post_remove_distdir)
-
-dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__post_remove_distdir)
-
-dist-tarZ: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__post_remove_distdir)
-
-dist-shar: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
-	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-	shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
-	$(am__post_remove_distdir)
-
-dist-zip: distdir
-	-rm -f $(distdir).zip
-	zip -rq $(distdir).zip $(distdir)
-	$(am__post_remove_distdir)
-
-dist dist-all:
-	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-	$(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	case '$(DIST_ARCHIVES)' in \
-	*.tar.gz*) \
-	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
-	*.tar.bz2*) \
-	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lz*) \
-	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-	*.tar.xz*) \
-	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-	*.tar.Z*) \
-	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-	*.shar.gz*) \
-	  eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
-	*.zip*) \
-	  unzip $(distdir).zip ;;\
-	esac
-	chmod -R a-w $(distdir)
-	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
-	chmod a-w $(distdir)
-	test -d $(distdir)/_build || exit 0; \
-	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build/sub \
-	  && ../../configure \
-	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	    --srcdir=../.. --prefix="$$dc_install_base" \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-	        distuninstallcheck \
-	  && chmod -R a-w "$$dc_install_base" \
-	  && ({ \
-	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
-	  && rm -rf "$$dc_destdir" \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist \
-	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-	  && cd "$$am__cwd" \
-	  || exit 1
-	$(am__post_remove_distdir)
-	@(echo "$(distdir) archives ready for distribution: "; \
-	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-	@test -n '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: trying to run $@ with an empty' \
-	       '$$(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	$(am__cd) '$(distuninstallcheck_dir)' || { \
-	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-	  exit 1; \
-	}; \
-	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-	   || { echo "ERROR: files left after uninstall:" ; \
-	        if test -n "$(DESTDIR)"; then \
-	          echo "  (check DESTDIR support)"; \
-	        fi ; \
-	        $(distuninstallcheck_listfiles) ; \
-	        exit 1; } >&2
-distcleancheck: distclean
-	@if test '$(srcdir)' = . ; then \
-	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-	  exit 1 ; \
-	fi
-	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-	  || { echo "ERROR: files left in build directory after distclean:" ; \
-	       $(distcleancheck_listfiles) ; \
-	       exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
-	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-libtool \
-	distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-pkgconfigDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-pkgconfigDATA
-
-.MAKE: $(am__recursive_targets) install-am install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
-	am--refresh check check-am clean clean-cscope clean-generic \
-	clean-libtool cscope cscopelist-am ctags ctags-am dist \
-	dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
-	dist-xz dist-zip distcheck distclean distclean-generic \
-	distclean-libtool distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am uninstall-pkgconfigDATA
-
-.PRECIOUS: Makefile
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

+ 134 - 0
README.md

@@ -0,0 +1,134 @@
+[![build](https://github.com/latchset/jose/workflows/build/badge.svg)](https://github.com/latchset/jose/actions)
+
+# Welcome to José!
+
+José is a C-language implementation of the Javascript Object Signing and
+Encryption standards. Specifically, José aims towards implementing the
+following standards:
+
+  * RFC 7515 - JSON Web Signature (JWS)
+  * RFC 7516 - JSON Web Encryption (JWE)
+  * RFC 7517 - JSON Web Key (JWK)
+  * RFC 7518 - JSON Web Algorithms (JWA)
+  * RFC 7519 - JSON Web Token (JWT)
+  * RFC 7520 - Examples of ... JOSE
+  * RFC 7638 - JSON Web Key (JWK) Thumbprint
+
+José is extensively tested against the RFC test vectors.
+
+# Supported Algorithms
+
+| Algorithm          | Supported | Algorithm Type | JWK Type |
+|--------------------|:---------:|:--------------:|:--------:|
+| HS256              |    YES    |   Signature    |    oct   |
+| HS384              |    YES    |   Signature    |    oct   |
+| HS512              |    YES    |   Signature    |    oct   |
+| RS256              |    YES    |   Signature    |    RSA   |
+| RS384              |    YES    |   Signature    |    RSA   |
+| RS512              |    YES    |   Signature    |    RSA   |
+| ES256              |    YES    |   Signature    |     EC   |
+| ES384              |    YES    |   Signature    |     EC   |
+| ES512              |    YES    |   Signature    |     EC   |
+| PS256              |    YES    |   Signature    |    RSA   |
+| PS384              |    YES    |   Signature    |    RSA   |
+| PS512              |    YES    |   Signature    |    RSA   |
+| none               |     NO    |   Signature    |    N/A   |
+| RSA1_5             |    YES    |   Key Wrap     |    RSA   |
+| RSA-OAEP           |    YES    |   Key Wrap     |    RSA   |
+| RSA-OAEP-256       |    YES    |   Key Wrap     |    RSA   |
+| A128KW             |    YES    |   Key Wrap     |    oct   |
+| A192KW             |    YES    |   Key Wrap     |    oct   |
+| A256KW             |    YES    |   Key Wrap     |    oct   |
+| dir                |    YES    |   Key Wrap     |    oct   |
+| ECDH-ES            |    YES    |   Key Wrap     |     EC   |
+| ECDH-ES+A128KW     |    YES    |   Key Wrap     |     EC   |
+| ECDH-ES+A192KW     |    YES    |   Key Wrap     |     EC   |
+| ECDH-ES+A256KW     |    YES    |   Key Wrap     |     EC   |
+| A128GCMKW          |    YES    |   Key Wrap     |    oct   |
+| A192GCMKW          |    YES    |   Key Wrap     |    oct   |
+| A256GCMKW          |    YES    |   Key Wrap     |    oct   |
+| PBES2-HS256+A128KW |    YES    |   Key Wrap     |    N/A   |
+| PBES2-HS384+A192KW |    YES    |   Key Wrap     |    N/A   |
+| PBES2-HS512+A256KW |    YES    |   Key Wrap     |    N/A   |
+| A128CBC-HS256      |    YES    |   Encryption   |    oct   |
+| A192CBC-HS384      |    YES    |   Encryption   |    oct   |
+| A256CBC-HS512      |    YES    |   Encryption   |    oct   |
+| A128GCM            |    YES    |   Encryption   |    oct   |
+| A192GCM            |    YES    |   Encryption   |    oct   |
+| A256GCM            |    YES    |   Encryption   |    oct   |
+
+# José Command-Line Utility
+José provides a command-line utility which encompasses most of the JOSE
+features. This allows for easy integration into your project and one-off
+scripts. Below you will find examples of the common commands.
+
+### Key Management
+
+José can generate keys, remove private keys and show thumbprints. For example:
+
+```sh
+# Generate three different kinds of keys
+$ jose jwk gen -i '{"alg": "A128GCM"}' -o oct.jwk
+$ jose jwk gen -i '{"alg": "RSA1_5"}' -o rsa.jwk
+$ jose jwk gen -i '{"alg": "ES256"}' -o ec.jwk
+
+# Remove the private keys
+$ jose jwk pub -i oct.jwk -o oct.pub.jwk
+$ jose jwk pub -i rsa.jwk -o rsa.pub.jwk
+$ jose jwk pub -i ec.jwk -o ec.pub.jwk
+
+# Calculate thumbprints
+$ jose jwk thp -i oct.jwk
+9ipMcxQLsI56Mqr3yYS8hJguJ6Mc8Zh6fkufoiKokrM
+$ jose jwk thp -i rsa.jwk
+rS6Yno3oQYRIztC6np62nthbmdydhrWmK2Zn_Izmerw
+$ jose jwk thp -i ec.jwk
+To8yMD92X82zvGoERAcDzlPP6awMYGM2HYDc1G5xOtc
+```
+
+### Signatures
+José can sign and verify data. For example:
+
+```sh
+$ echo hi | jose jws sig -i- -k ec.jwk -o msg.jws
+$ jose jws ver -i msg.jws -k ec.pub.jwk
+hi
+$ jose jws ver -i msg.jws -k oct.jwk
+No signatures validated!
+```
+
+### Encryption
+José can encrypt and decrypt data. For example:
+
+```sh
+$ echo hi | jose jwe enc -i- -k rsa.pub.jwk -o msg.jwe
+$ jose jwe dec -i msg.jwe -k rsa.jwk
+hi
+$ jose jwe dec -i msg.jwe -k oct.jwk
+Decryption failed!
+```
+
+# Building and Installing from Source
+Building Jose is fairly straightforward:
+
+    $ mkdir build && cd build
+    $ meson .. --prefix=/usr
+    $ ninja
+    $ sudo ninja install
+
+You can even run the tests if you'd like:
+
+    $ meson test
+
+To build a FreeBSD, HardenedBSD or OPNsense package
+use:
+
+    (as root) # pkg install meson pkgconf jansson openssl
+    $ mkdir build && cd build
+    $ meson .. --prefix=/usr/local
+    $ ninja
+    $ meson test
+    (as root) # ninja install
+
+Once built it does not require meson and pkgconf,
+but still requires jansson and openssl.

File diff suppressed because it is too large
+ 0 - 10528
aclocal.m4


+ 0 - 27
cmd/Makefile.am

@@ -1,27 +0,0 @@
-AM_CFLAGS = @JOSE_CFLAGS@ @jansson_CFLAGS@ -I$(top_srcdir) -I$(top_builddir)
-LDFLAGS += ../lib/libjose.la @jansson_LIBS@
-
-bin_PROGRAMS = jose
-jose_SOURCES = \
-    jose.c jose.h \
-    b64/b64.h \
-    b64/dec.c \
-    b64/enc.c \
-    jwk/jwk.h \
-    jwk/eql.c \
-    jwk/exc.c \
-    jwk/gen.c \
-    jwk/pub.c \
-    jwk/thp.c \
-    jwk/use.c \
-    jws/jws.h \
-    jws/fmt.c \
-    jws/sig.c \
-    jws/ver.c \
-    jwe/jwe.h \
-    jwe/pwd.h \
-    jwe/fmt.c \
-    jwe/dec.c \
-    jwe/enc.c \
-    alg.c \
-    fmt.c

+ 0 - 735
cmd/Makefile.in

@@ -1,735 +0,0 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-bin_PROGRAMS = jose$(EXEEXT)
-subdir = cmd
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-PROGRAMS = $(bin_PROGRAMS)
-am__dirstamp = $(am__leading_dot)dirstamp
-am_jose_OBJECTS = jose.$(OBJEXT) b64/dec.$(OBJEXT) b64/enc.$(OBJEXT) \
-	jwk/eql.$(OBJEXT) jwk/exc.$(OBJEXT) jwk/gen.$(OBJEXT) \
-	jwk/pub.$(OBJEXT) jwk/thp.$(OBJEXT) jwk/use.$(OBJEXT) \
-	jws/fmt.$(OBJEXT) jws/sig.$(OBJEXT) jws/ver.$(OBJEXT) \
-	jwe/fmt.$(OBJEXT) jwe/dec.$(OBJEXT) jwe/enc.$(OBJEXT) \
-	alg.$(OBJEXT) fmt.$(OBJEXT)
-jose_OBJECTS = $(am_jose_OBJECTS)
-jose_LDADD = $(LDADD)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(jose_SOURCES)
-DIST_SOURCES = $(jose_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-JOSE_CFLAGS = @JOSE_CFLAGS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@ ../lib/libjose.la @jansson_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-jansson_CFLAGS = @jansson_CFLAGS@
-jansson_LIBS = @jansson_LIBS@
-libcrypto_CFLAGS = @libcrypto_CFLAGS@
-libcrypto_LIBS = @libcrypto_LIBS@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-zlib_CFLAGS = @zlib_CFLAGS@
-zlib_LIBS = @zlib_LIBS@
-AM_CFLAGS = @JOSE_CFLAGS@ @jansson_CFLAGS@ -I$(top_srcdir) -I$(top_builddir)
-jose_SOURCES = \
-    jose.c jose.h \
-    b64/b64.h \
-    b64/dec.c \
-    b64/enc.c \
-    jwk/jwk.h \
-    jwk/eql.c \
-    jwk/exc.c \
-    jwk/gen.c \
-    jwk/pub.c \
-    jwk/thp.c \
-    jwk/use.c \
-    jws/jws.h \
-    jws/fmt.c \
-    jws/sig.c \
-    jws/ver.c \
-    jwe/jwe.h \
-    jwe/pwd.h \
-    jwe/fmt.c \
-    jwe/dec.c \
-    jwe/enc.c \
-    alg.c \
-    fmt.c
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign cmd/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign cmd/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-binPROGRAMS: $(bin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
-	fi; \
-	for p in $$list; do echo "$$p $$p"; done | \
-	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p \
-	 || test -f $$p1 \
-	  ; then echo "$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n;h' \
-	    -e 's|.*|.|' \
-	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
-	sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
-	    else { print "f", $$3 "/" $$4, $$1; } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	    test -z "$$files" || { \
-	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
-	    } \
-	; done
-
-uninstall-binPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' \
-	`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
-
-clean-binPROGRAMS:
-	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-b64/$(am__dirstamp):
-	@$(MKDIR_P) b64
-	@: > b64/$(am__dirstamp)
-b64/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) b64/$(DEPDIR)
-	@: > b64/$(DEPDIR)/$(am__dirstamp)
-b64/dec.$(OBJEXT): b64/$(am__dirstamp) b64/$(DEPDIR)/$(am__dirstamp)
-b64/enc.$(OBJEXT): b64/$(am__dirstamp) b64/$(DEPDIR)/$(am__dirstamp)
-jwk/$(am__dirstamp):
-	@$(MKDIR_P) jwk
-	@: > jwk/$(am__dirstamp)
-jwk/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) jwk/$(DEPDIR)
-	@: > jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/eql.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/exc.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/gen.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/pub.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/thp.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jwk/use.$(OBJEXT): jwk/$(am__dirstamp) jwk/$(DEPDIR)/$(am__dirstamp)
-jws/$(am__dirstamp):
-	@$(MKDIR_P) jws
-	@: > jws/$(am__dirstamp)
-jws/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) jws/$(DEPDIR)
-	@: > jws/$(DEPDIR)/$(am__dirstamp)
-jws/fmt.$(OBJEXT): jws/$(am__dirstamp) jws/$(DEPDIR)/$(am__dirstamp)
-jws/sig.$(OBJEXT): jws/$(am__dirstamp) jws/$(DEPDIR)/$(am__dirstamp)
-jws/ver.$(OBJEXT): jws/$(am__dirstamp) jws/$(DEPDIR)/$(am__dirstamp)
-jwe/$(am__dirstamp):
-	@$(MKDIR_P) jwe
-	@: > jwe/$(am__dirstamp)
-jwe/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) jwe/$(DEPDIR)
-	@: > jwe/$(DEPDIR)/$(am__dirstamp)
-jwe/fmt.$(OBJEXT): jwe/$(am__dirstamp) jwe/$(DEPDIR)/$(am__dirstamp)
-jwe/dec.$(OBJEXT): jwe/$(am__dirstamp) jwe/$(DEPDIR)/$(am__dirstamp)
-jwe/enc.$(OBJEXT): jwe/$(am__dirstamp) jwe/$(DEPDIR)/$(am__dirstamp)
-
-jose$(EXEEXT): $(jose_OBJECTS) $(jose_DEPENDENCIES) $(EXTRA_jose_DEPENDENCIES) 
-	@rm -f jose$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(jose_OBJECTS) $(jose_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-	-rm -f b64/*.$(OBJEXT)
-	-rm -f jwe/*.$(OBJEXT)
-	-rm -f jwk/*.$(OBJEXT)
-	-rm -f jws/*.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jose.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@b64/$(DEPDIR)/dec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@b64/$(DEPDIR)/enc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwe/$(DEPDIR)/dec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwe/$(DEPDIR)/enc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwe/$(DEPDIR)/fmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/eql.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/exc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/gen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/pub.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/thp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jwk/$(DEPDIR)/use.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jws/$(DEPDIR)/fmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jws/$(DEPDIR)/sig.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jws/$(DEPDIR)/ver.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-	for dir in "$(DESTDIR)$(bindir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-rm -f b64/$(DEPDIR)/$(am__dirstamp)
-	-rm -f b64/$(am__dirstamp)
-	-rm -f jwe/$(DEPDIR)/$(am__dirstamp)
-	-rm -f jwe/$(am__dirstamp)
-	-rm -f jwk/$(DEPDIR)/$(am__dirstamp)
-	-rm -f jwk/$(am__dirstamp)
-	-rm -f jws/$(DEPDIR)/$(am__dirstamp)
-	-rm -f jws/$(am__dirstamp)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR) b64/$(DEPDIR) jwe/$(DEPDIR) jwk/$(DEPDIR) jws/$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) b64/$(DEPDIR) jwe/$(DEPDIR) jwk/$(DEPDIR) jws/$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
-	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
-	ctags ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-binPROGRAMS \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
-
-.PRECIOUS: Makefile
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

+ 4 - 1
cmd/jwe/pwd.h

@@ -57,8 +57,10 @@ jwe_getpass(const char *prompt)
     nf.c_lflag &= ~ECHO;
     nf.c_lflag &= ~ECHO;
     nf.c_lflag |= ECHONL;
     nf.c_lflag |= ECHONL;
 
 
-    if (tcsetattr(fileno(tty), TCSANOW, &nf) != 0)
+    if (tcsetattr(fileno(tty), TCSANOW, &nf) != 0) {
+        fclose(tty);
         return NULL;
         return NULL;
+    }
 
 
     fprintf(tty, "%s", prompt);
     fprintf(tty, "%s", prompt);
 
 
@@ -72,6 +74,7 @@ jwe_getpass(const char *prompt)
     }
     }
 
 
     tcsetattr(fileno(tty), TCSANOW, &of);
     tcsetattr(fileno(tty), TCSANOW, &of);
+    fclose(tty);
     return pwd;
     return pwd;
 }
 }
 #endif
 #endif

+ 1 - 1
cmd/jwk/thp.c

@@ -90,7 +90,7 @@ static const jcmd_cfg_t cfgs[] = {
         .off = offsetof(jcmd_opt_t, hash),
         .off = offsetof(jcmd_opt_t, hash),
         .set = opt_set_hash,
         .set = opt_set_hash,
         .doc = doc_hash,
         .doc = doc_hash,
-        .def = "S1",
+        .def = "S256",
     },
     },
     {
     {
         .opt = { "output", required_argument, .val = 'o' },
         .opt = { "output", required_argument, .val = 'o' },

+ 27 - 0
cmd/meson.build

@@ -0,0 +1,27 @@
+executable(meson.project_name(),
+  'jose.c', 'jose.h',
+  'b64/b64.h',
+  'b64/dec.c',
+  'b64/enc.c',
+  'jwk/jwk.h',
+  'jwk/eql.c',
+  'jwk/exc.c',
+  'jwk/gen.c',
+  'jwk/pub.c',
+  'jwk/thp.c',
+  'jwk/use.c',
+  'jws/jws.h',
+  'jws/fmt.c',
+  'jws/sig.c',
+  'jws/ver.c',
+  'jwe/jwe.h',
+  'jwe/pwd.h',
+  'jwe/fmt.c',
+  'jwe/dec.c',
+  'jwe/enc.c',
+  'alg.c',
+  'fmt.c',
+  dependencies: jansson,
+  link_with: libjose,
+  install: true
+)

+ 0 - 348
compile

@@ -1,348 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand '-c -o'.
-
-scriptversion=2016-01-11.22; # UTC
-
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent tools from complaining about whitespace usage.
-IFS=" ""	$nl"
-
-file_conv=
-
-# func_file_conv build_file lazy
-# Convert a $build file to $host form and store it in $file
-# Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
-func_file_conv ()
-{
-  file=$1
-  case $file in
-    / | /[!/]*) # absolute file, and not a UNC file
-      if test -z "$file_conv"; then
-	# lazily determine how to convert abs files
-	case `uname -s` in
-	  MINGW*)
-	    file_conv=mingw
-	    ;;
-	  CYGWIN*)
-	    file_conv=cygwin
-	    ;;
-	  *)
-	    file_conv=wine
-	    ;;
-	esac
-      fi
-      case $file_conv/,$2, in
-	*,$file_conv,*)
-	  ;;
-	mingw/*)
-	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
-	  ;;
-	cygwin/*)
-	  file=`cygpath -m "$file" || echo "$file"`
-	  ;;
-	wine/*)
-	  file=`winepath -w "$file" || echo "$file"`
-	  ;;
-      esac
-      ;;
-  esac
-}
-
-# func_cl_dashL linkdir
-# Make cl look for libraries in LINKDIR
-func_cl_dashL ()
-{
-  func_file_conv "$1"
-  if test -z "$lib_path"; then
-    lib_path=$file
-  else
-    lib_path="$lib_path;$file"
-  fi
-  linker_opts="$linker_opts -LIBPATH:$file"
-}
-
-# func_cl_dashl library
-# Do a library search-path lookup for cl
-func_cl_dashl ()
-{
-  lib=$1
-  found=no
-  save_IFS=$IFS
-  IFS=';'
-  for dir in $lib_path $LIB
-  do
-    IFS=$save_IFS
-    if $shared && test -f "$dir/$lib.dll.lib"; then
-      found=yes
-      lib=$dir/$lib.dll.lib
-      break
-    fi
-    if test -f "$dir/$lib.lib"; then
-      found=yes
-      lib=$dir/$lib.lib
-      break
-    fi
-    if test -f "$dir/lib$lib.a"; then
-      found=yes
-      lib=$dir/lib$lib.a
-      break
-    fi
-  done
-  IFS=$save_IFS
-
-  if test "$found" != yes; then
-    lib=$lib.lib
-  fi
-}
-
-# func_cl_wrapper cl arg...
-# Adjust compile command to suit cl
-func_cl_wrapper ()
-{
-  # Assume a capable shell
-  lib_path=
-  shared=:
-  linker_opts=
-  for arg
-  do
-    if test -n "$eat"; then
-      eat=
-    else
-      case $1 in
-	-o)
-	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
-	  eat=1
-	  case $2 in
-	    *.o | *.[oO][bB][jJ])
-	      func_file_conv "$2"
-	      set x "$@" -Fo"$file"
-	      shift
-	      ;;
-	    *)
-	      func_file_conv "$2"
-	      set x "$@" -Fe"$file"
-	      shift
-	      ;;
-	  esac
-	  ;;
-	-I)
-	  eat=1
-	  func_file_conv "$2" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-I*)
-	  func_file_conv "${1#-I}" mingw
-	  set x "$@" -I"$file"
-	  shift
-	  ;;
-	-l)
-	  eat=1
-	  func_cl_dashl "$2"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-l*)
-	  func_cl_dashl "${1#-l}"
-	  set x "$@" "$lib"
-	  shift
-	  ;;
-	-L)
-	  eat=1
-	  func_cl_dashL "$2"
-	  ;;
-	-L*)
-	  func_cl_dashL "${1#-L}"
-	  ;;
-	-static)
-	  shared=false
-	  ;;
-	-Wl,*)
-	  arg=${1#-Wl,}
-	  save_ifs="$IFS"; IFS=','
-	  for flag in $arg; do
-	    IFS="$save_ifs"
-	    linker_opts="$linker_opts $flag"
-	  done
-	  IFS="$save_ifs"
-	  ;;
-	-Xlinker)
-	  eat=1
-	  linker_opts="$linker_opts $2"
-	  ;;
-	-*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
-	  func_file_conv "$1"
-	  set x "$@" -Tp"$file"
-	  shift
-	  ;;
-	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
-	  func_file_conv "$1" mingw
-	  set x "$@" "$file"
-	  shift
-	  ;;
-	*)
-	  set x "$@" "$1"
-	  shift
-	  ;;
-      esac
-    fi
-    shift
-  done
-  if test -n "$linker_opts"; then
-    linker_opts="-link$linker_opts"
-  fi
-  exec "$@" $linker_opts
-  exit 1
-}
-
-eat=
-
-case $1 in
-  '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand '-c -o'.
-Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file 'INSTALL'.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
-  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
-    func_cl_wrapper "$@"      # Doesn't return...
-    ;;
-esac
-
-ofile=
-cfile=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-	# configure might choose to run compile as 'compile cc -o foo foo.c'.
-	# So we strip '-o arg' only if arg is an object.
-	eat=1
-	case $2 in
-	  *.o | *.obj)
-	    ofile=$2
-	    ;;
-	  *)
-	    set x "$@" -o "$2"
-	    shift
-	    ;;
-	esac
-	;;
-      *.c)
-	cfile=$1
-	set x "$@" "$1"
-	shift
-	;;
-      *)
-	set x "$@" "$1"
-	shift
-	;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no '-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # '.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use '[/\\:.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:

File diff suppressed because it is too large
+ 0 - 1476
config.guess


File diff suppressed because it is too large
+ 0 - 1836
config.sub


File diff suppressed because it is too large
+ 0 - 14785
configure


+ 0 - 65
configure.ac

@@ -1,65 +0,0 @@
-AC_PREREQ(2.62)
-AC_INIT(jose, 10)
-AC_CANONICAL_SYSTEM
-AC_PROG_CC_C99
-
-AM_INIT_AUTOMAKE([subdir-objects foreign no-dist-gzip dist-bzip2 parallel-tests])
-AM_SILENT_RULES([yes])
-AM_PROG_CC_C_O
-
-LT_INIT([disable-static])
-
-PKG_PROG_PKG_CONFIG([0.25])
-
-PKG_CHECK_MODULES([zlib], [zlib])
-PKG_CHECK_MODULES([jansson], [jansson >= 2.10])
-PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.0.2])
-
-AC_OPENMP
-AC_SUBST([OPENMP_CFLAGS])
-
-JOSE_CFLAGS="\
--Wall \
--Wextra \
--Werror \
--Wstrict-aliasing \
--Wchar-subscripts \
--Wformat-security \
--Wmissing-declarations \
--Wmissing-prototypes \
--Wnested-externs \
--Wpointer-arith \
--Wshadow \
--Wsign-compare \
--Wstrict-prototypes \
--Wtype-limits \
--Wunused-function \
--Wno-missing-field-initializers \
--Wno-unused-command-line-argument \
--Wno-unused-parameter \
--Wno-unknown-pragmas \
-"
-AC_SUBST([JOSE_CFLAGS])
-
-AC_MSG_CHECKING([for linker script support])
-LDVS=`$LD --help < /dev/null 2>/dev/null | grep version-script`
-if test "$LDVS"; then
-    have_ld_version_script=yes
-    AC_MSG_RESULT(yes)
-else
-    have_ld_version_script=no
-    AC_MSG_RESULT(no)
-fi
-AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
-
-AC_CONFIG_FILES([
-    jose/Makefile
-    lib/Makefile
-    cmd/Makefile
-    tests/Makefile
-    doc/Makefile
-    Makefile
-    jose/jose.h
-    jose.pc
-])
-AC_OUTPUT

+ 0 - 791
depcomp

@@ -1,791 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2016-01-11.22; # UTC
-
-# Copyright (C) 1999-2017 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
-  '')
-    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-    exit 1;
-    ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by 'PROGRAMS ARGS'.
-  object      Object file output by 'PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputting dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-# Get the directory component of the given path, and save it in the
-# global variables '$dir'.  Note that this directory component will
-# be either empty or ending with a '/' character.  This is deliberate.
-set_dir_from ()
-{
-  case $1 in
-    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
-      *) dir=;;
-  esac
-}
-
-# Get the suffix-stripped basename of the given path, and save it the
-# global variable '$base'.
-set_base_from ()
-{
-  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
-}
-
-# If no dependency file was actually created by the compiler invocation,
-# we still have to create a dummy depfile, to avoid errors with the
-# Makefile "include basename.Plo" scheme.
-make_dummy_depfile ()
-{
-  echo "#dummy" > "$depfile"
-}
-
-# Factor out some common post-processing of the generated depfile.
-# Requires the auxiliary global variable '$tmpdepfile' to be set.
-aix_post_process_depfile ()
-{
-  # If the compiler actually managed to produce a dependency file,
-  # post-process it.
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependency.h'.
-    # Do two passes, one to just change these to
-    #   $object: dependency.h
-    # and one to simply output
-    #   dependency.h:
-    # which is needed to avoid the deleted-header problem.
-    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
-      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
-    } > "$depfile"
-    rm -f "$tmpdepfile"
-  else
-    make_dummy_depfile
-  fi
-}
-
-# A tabulation character.
-tab='	'
-# A newline character.
-nl='
-'
-# Character ranges might be problematic outside the C locale.
-# These definitions help.
-upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
-lower=abcdefghijklmnopqrstuvwxyz
-digits=0123456789
-alpha=${upper}${lower}
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Avoid interferences from the environment.
-gccflag= dashmflag=
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-  # This is just like dashmstdout with a different argument.
-  dashmflag=-xM
-  depmode=dashmstdout
-fi
-
-cygpath_u="cygpath -u -f -"
-if test "$depmode" = msvcmsys; then
-  # This is just like msvisualcpp but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvisualcpp
-fi
-
-if test "$depmode" = msvc7msys; then
-  # This is just like msvc7 but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvc7
-fi
-
-if test "$depmode" = xlc; then
-  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
-  gccflag=-qmakedep=gcc,-MF
-  depmode=gcc
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am.  Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
-  for arg
-  do
-    case $arg in
-    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
-    *)  set fnord "$@" "$arg" ;;
-    esac
-    shift # fnord
-    shift # $arg
-  done
-  "$@"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
-## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
-## (see the conditional assignment to $gccflag above).
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).  Also, it might not be
-##   supported by the other compilers which use the 'gcc' depmode.
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The second -e expression handles DOS-style file names with drive
-  # letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the "deleted header file" problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-## Some versions of gcc put a space before the ':'.  On the theory
-## that the space means something, we add a space to the output as
-## well.  hp depmode also adds that space, but also prefixes the VPATH
-## to the object.  Take care to not repeat it in the output.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-sgi)
-  if test "$libtool" = yes; then
-    "$@" "-Wp,-MDupdate,$tmpdepfile"
-  else
-    "$@" -MDupdate "$tmpdepfile"
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-
-  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
-    echo "$object : \\" > "$depfile"
-    # Clip off the initial element (the dependent).  Don't try to be
-    # clever and replace this with sed code, as IRIX sed won't handle
-    # lines with more than a fixed number of characters (4096 in
-    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like '#:fec' to the end of the
-    # dependency line.
-    tr ' ' "$nl" < "$tmpdepfile" \
-      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
-      | tr "$nl" ' ' >> "$depfile"
-    echo >> "$depfile"
-    # The second pass generates a dummy entry for each header file.
-    tr ' ' "$nl" < "$tmpdepfile" \
-      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-      >> "$depfile"
-  else
-    make_dummy_depfile
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-xlc)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts '$object:' at the
-  # start of each line; $object doesn't have directory information.
-  # Version 6 uses the directory in both cases.
-  set_dir_from "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$base.u
-    tmpdepfile3=$dir.libs/$base.u
-    "$@" -Wc,-M
-  else
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$dir$base.u
-    tmpdepfile3=$dir$base.u
-    "$@" -M
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  aix_post_process_depfile
-  ;;
-
-tcc)
-  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
-  # FIXME: That version still under development at the moment of writing.
-  #        Make that this statement remains true also for stable, released
-  #        versions.
-  # It will wrap lines (doesn't matter whether long or short) with a
-  # trailing '\', as in:
-  #
-  #   foo.o : \
-  #    foo.c \
-  #    foo.h \
-  #
-  # It will put a trailing '\' even on the last line, and will use leading
-  # spaces rather than leading tabs (at least since its commit 0394caf7
-  # "Emit spaces for -MD").
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
-  # We have to change lines of the first kind to '$object: \'.
-  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
-  # And for each line of the second kind, we have to emit a 'dep.h:'
-  # dummy dependency, to avoid the deleted-header problem.
-  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-## The order of this option in the case statement is important, since the
-## shell code in configure will try each of these formats in the order
-## listed in this file.  A plain '-MD' option would be understood by many
-## compilers, so we must ensure this comes after the gcc and icc options.
-pgcc)
-  # Portland's C compiler understands '-MD'.
-  # Will always output deps to 'file.d' where file is the root name of the
-  # source file under compilation, even if file resides in a subdirectory.
-  # The object file name does not affect the name of the '.d' file.
-  # pgcc 10.2 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using '\' :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-  set_dir_from "$object"
-  # Use the source, not the object, to determine the base name, since
-  # that's sadly what pgcc will do too.
-  set_base_from "$source"
-  tmpdepfile=$base.d
-
-  # For projects that build the same source file twice into different object
-  # files, the pgcc approach of using the *source* file root name can cause
-  # problems in parallel builds.  Use a locking strategy to avoid stomping on
-  # the same $tmpdepfile.
-  lockdir=$base.d-lock
-  trap "
-    echo '$0: caught signal, cleaning up...' >&2
-    rmdir '$lockdir'
-    exit 1
-  " 1 2 13 15
-  numtries=100
-  i=$numtries
-  while test $i -gt 0; do
-    # mkdir is a portable test-and-set.
-    if mkdir "$lockdir" 2>/dev/null; then
-      # This process acquired the lock.
-      "$@" -MD
-      stat=$?
-      # Release the lock.
-      rmdir "$lockdir"
-      break
-    else
-      # If the lock is being held by a different process, wait
-      # until the winning process is done or we timeout.
-      while test -d "$lockdir" && test $i -gt 0; do
-        sleep 1
-        i=`expr $i - 1`
-      done
-    fi
-    i=`expr $i - 1`
-  done
-  trap - 1 2 13 15
-  if test $i -le 0; then
-    echo "$0: failed to acquire lock after $numtries attempts" >&2
-    echo "$0: check lockdir '$lockdir'" >&2
-    exit 1
-  fi
-
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp2)
-  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
-  # compilers, which have integrated preprocessors.  The correct option
-  # to use with these is +Maked; it writes dependencies to a file named
-  # 'foo.d', which lands next to the object file, wherever that
-  # happens to be.
-  # Much of this is similar to the tru64 case; see comments there.
-  set_dir_from  "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir.libs/$base.d
-    "$@" -Wc,+Maked
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    "$@" +Maked
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-     rm -f "$tmpdepfile1" "$tmpdepfile2"
-     exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add 'dependent.h:' lines.
-    sed -ne '2,${
-               s/^ *//
-               s/ \\*$//
-               s/$/:/
-               p
-             }' "$tmpdepfile" >> "$depfile"
-  else
-    make_dummy_depfile
-  fi
-  rm -f "$tmpdepfile" "$tmpdepfile2"
-  ;;
-
-tru64)
-  # The Tru64 compiler uses -MD to generate dependencies as a side
-  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
-  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-  # dependencies in 'foo.d' instead, so we check for that too.
-  # Subdirectories are respected.
-  set_dir_from  "$object"
-  set_base_from "$object"
-
-  if test "$libtool" = yes; then
-    # Libtool generates 2 separate objects for the 2 libraries.  These
-    # two compilations output dependencies in $dir.libs/$base.o.d and
-    # in $dir$base.o.d.  We have to check for both files, because
-    # one of the two compilations can be disabled.  We should prefer
-    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-    # automatically cleaned when .libs/ is deleted, while ignoring
-    # the former would cause a distcleancheck panic.
-    tmpdepfile1=$dir$base.o.d          # libtool 1.5
-    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
-    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
-    "$@" -Wc,-MD
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    tmpdepfile3=$dir$base.d
-    "$@" -MD
-  fi
-
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  # Same post-processing that is required for AIX mode.
-  aix_post_process_depfile
-  ;;
-
-msvc7)
-  if test "$libtool" = yes; then
-    showIncludes=-Wc,-showIncludes
-  else
-    showIncludes=-showIncludes
-  fi
-  "$@" $showIncludes > "$tmpdepfile"
-  stat=$?
-  grep -v '^Note: including file: ' "$tmpdepfile"
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The first sed program below extracts the file names and escapes
-  # backslashes for cygpath.  The second sed program outputs the file
-  # name when reading, but also accumulates all include files in the
-  # hold buffer in order to output them again at the end.  This only
-  # works with sed implementations that can handle large buffers.
-  sed < "$tmpdepfile" -n '
-/^Note: including file:  *\(.*\)/ {
-  s//\1/
-  s/\\/\\\\/g
-  p
-}' | $cygpath_u | sort -u | sed -n '
-s/ /\\ /g
-s/\(.*\)/'"$tab"'\1 \\/p
-s/.\(.*\) \\/\1:/
-H
-$ {
-  s/.*/'"$tab"'/
-  G
-  p
-}' >> "$depfile"
-  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
-  rm -f "$tmpdepfile"
-  ;;
-
-msvc7msys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for ':'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
-  "$@" $dashmflag |
-    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this sed invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no eat=no
-  for arg
-  do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    if test $eat = yes; then
-      eat=no
-      continue
-    fi
-    case "$arg" in
-    -D*|-I*)
-      set fnord "$@" "$arg"; shift ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -arch)
-      eat=yes ;;
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix=`echo "$object" | sed 's/^.*\././'`
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  # makedepend may prepend the VPATH from the source file name to the object.
-  # No need to regex-escape $object, excess matching of '.' is harmless.
-  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process the last invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed '1,2d' "$tmpdepfile" \
-    | tr ' ' "$nl" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  "$@" -E \
-    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-    | sed '$ s: \\$::' > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-        set fnord "$@"
-        shift
-        shift
-        ;;
-    *)
-        set fnord "$@" "$arg"
-        shift
-        shift
-        ;;
-    esac
-  done
-  "$@" -E 2>/dev/null |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
-  echo "$tab" >> "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvcmsys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:

+ 0 - 28
doc/Makefile.am

@@ -1,28 +0,0 @@
-man1_MANS = \
-    ronn/jose.1 \
-    ronn/jose-alg.1 \
-    ronn/jose-fmt.1 \
-    ronn/jose-b64-dec.1 \
-    ronn/jose-b64-enc.1 \
-    ronn/jose-jwe-dec.1 \
-    ronn/jose-jwe-enc.1 \
-    ronn/jose-jwe-fmt.1 \
-    ronn/jose-jwk-exc.1 \
-    ronn/jose-jwk-gen.1 \
-    ronn/jose-jwk-pub.1 \
-    ronn/jose-jwk-thp.1 \
-    ronn/jose-jwk-use.1 \
-    ronn/jose-jws-fmt.1 \
-    ronn/jose-jws-sig.1 \
-    ronn/jose-jws-ver.1
-
-man3_MANS = \
-    doxygen/man/man3/jose_b64.3 \
-    doxygen/man/man3/jose_jwk.3 \
-    doxygen/man/man3/jose_jws.3 \
-    doxygen/man/man3/jose_cfg.3 \
-    doxygen/man/man3/jose_jwe.3 \
-    doxygen/man/man3/jose_io_t.3 \
-    doxygen/man/man3/jose_io.3
-
-EXTRA_DIST = $(man1_MANS) $(man3_MANS)

+ 0 - 594
doc/Makefile.in

@@ -1,594 +0,0 @@
-# Makefile.in generated by automake 1.15.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2017 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = doc
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
-man1dir = $(mandir)/man1
-am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"
-man3dir = $(mandir)/man3
-NROFF = nroff
-MANS = $(man1_MANS) $(man3_MANS)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-am__DIST_COMMON = $(srcdir)/Makefile.in
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-JOSE_CFLAGS = @JOSE_CFLAGS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPENMP_CFLAGS = @OPENMP_CFLAGS@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-jansson_CFLAGS = @jansson_CFLAGS@
-jansson_LIBS = @jansson_LIBS@
-libcrypto_CFLAGS = @libcrypto_CFLAGS@
-libcrypto_LIBS = @libcrypto_LIBS@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-zlib_CFLAGS = @zlib_CFLAGS@
-zlib_LIBS = @zlib_LIBS@
-man1_MANS = \
-    ronn/jose.1 \
-    ronn/jose-alg.1 \
-    ronn/jose-fmt.1 \
-    ronn/jose-b64-dec.1 \
-    ronn/jose-b64-enc.1 \
-    ronn/jose-jwe-dec.1 \
-    ronn/jose-jwe-enc.1 \
-    ronn/jose-jwe-fmt.1 \
-    ronn/jose-jwk-exc.1 \
-    ronn/jose-jwk-gen.1 \
-    ronn/jose-jwk-pub.1 \
-    ronn/jose-jwk-thp.1 \
-    ronn/jose-jwk-use.1 \
-    ronn/jose-jws-fmt.1 \
-    ronn/jose-jws-sig.1 \
-    ronn/jose-jws-ver.1
-
-man3_MANS = \
-    doxygen/man/man3/jose_b64.3 \
-    doxygen/man/man3/jose_jwk.3 \
-    doxygen/man/man3/jose_jws.3 \
-    doxygen/man/man3/jose_cfg.3 \
-    doxygen/man/man3/jose_jwe.3 \
-    doxygen/man/man3/jose_io_t.3 \
-    doxygen/man/man3/jose_io.3
-
-EXTRA_DIST = $(man1_MANS) $(man3_MANS)
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign doc/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-man1: $(man1_MANS)
-	@$(NORMAL_INSTALL)
-	@list1='$(man1_MANS)'; \
-	list2=''; \
-	test -n "$(man1dir)" \
-	  && test -n "`echo $$list1$$list2`" \
-	  || exit 0; \
-	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
-	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
-	{ for i in $$list1; do echo "$$i"; done;  \
-	if test -n "$$list2"; then \
-	  for i in $$list2; do echo "$$i"; done \
-	    | sed -n '/\.1[a-z]*$$/p'; \
-	fi; \
-	} | while read p; do \
-	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; echo "$$p"; \
-	done | \
-	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
-	sed 'N;N;s,\n, ,g' | { \
-	list=; while read file base inst; do \
-	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
-	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
-	  fi; \
-	done; \
-	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
-	while read files; do \
-	  test -z "$$files" || { \
-	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
-	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
-	done; }
-
-uninstall-man1:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
-	files=`{ for i in $$list; do echo "$$i"; done; \
-	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
-install-man3: $(man3_MANS)
-	@$(NORMAL_INSTALL)
-	@list1='$(man3_MANS)'; \
-	list2=''; \
-	test -n "$(man3dir)" \
-	  && test -n "`echo $$list1$$list2`" \
-	  || exit 0; \
-	echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
-	$(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
-	{ for i in $$list1; do echo "$$i"; done;  \
-	if test -n "$$list2"; then \
-	  for i in $$list2; do echo "$$i"; done \
-	    | sed -n '/\.3[a-z]*$$/p'; \
-	fi; \
-	} | while read p; do \
-	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-	  echo "$$d$$p"; echo "$$p"; \
-	done | \
-	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
-	sed 'N;N;s,\n, ,g' | { \
-	list=; while read file base inst; do \
-	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
-	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
-	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
-	  fi; \
-	done; \
-	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
-	while read files; do \
-	  test -z "$$files" || { \
-	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
-	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
-	done; }
-
-uninstall-man3:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man3_MANS)'; test -n "$(man3dir)" || exit 0; \
-	files=`{ for i in $$list; do echo "$$i"; done; \
-	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
-	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
-tags TAGS:
-
-ctags CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: check-am
-all-am: Makefile $(MANS)
-installdirs:
-	for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
-	-rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-man
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man: install-man1 install-man3
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-man
-
-uninstall-man: uninstall-man1 uninstall-man3
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	cscopelist-am ctags-am distclean distclean-generic \
-	distclean-libtool distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-man1 install-man3 install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
-	uninstall-am uninstall-man uninstall-man1 uninstall-man3
-
-.PRECIOUS: Makefile
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:

File diff suppressed because it is too large
+ 2473 - 0
doc/doxygen/Doxyfile


+ 78 - 0
doc/doxygen/html/annotated.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structjose__io__t.html" target="_self">jose_io_t</a></td><td class="desc">The interface for chained IO </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

File diff suppressed because it is too large
+ 86 - 0
doc/doxygen/html/b64_8h_source.html


BIN
doc/doxygen/html/bc_s.png


BIN
doc/doxygen/html/bdwn.png


File diff suppressed because it is too large
+ 84 - 0
doc/doxygen/html/cfg_8h_source.html


+ 82 - 0
doc/doxygen/html/classes.html

@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_j">j</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter_j"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;j&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_j">j</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

BIN
doc/doxygen/html/closed.png


+ 77 - 0
doc/doxygen/html/dir_f2bd36b8a3f3d476e48bdb5015c9fdfb.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: /home/nmccallu/Projects/jose/jose Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_f2bd36b8a3f3d476e48bdb5015c9fdfb.html">jose</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">jose Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

BIN
doc/doxygen/html/doc.png


File diff suppressed because it is too large
+ 1596 - 0
doc/doxygen/html/doxygen.css


BIN
doc/doxygen/html/doxygen.png


+ 97 - 0
doc/doxygen/html/dynsections.js

@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var 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;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+

BIN
doc/doxygen/html/folderclosed.png


BIN
doc/doxygen/html/folderopen.png


+ 77 - 0
doc/doxygen/html/functions.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div><ul>
+<li>done
+: <a class="el" href="structjose__io__t.html#a76d1eac0d05d3604c16686b08bd80aa0">jose_io_t</a>
+</li>
+<li>feed
+: <a class="el" href="structjose__io__t.html#afa8ec8ac8802fd2600466b9477730cfe">jose_io_t</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 77 - 0
doc/doxygen/html/functions_vars.html

@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>done
+: <a class="el" href="structjose__io__t.html#a76d1eac0d05d3604c16686b08bd80aa0">jose_io_t</a>
+</li>
+<li>feed
+: <a class="el" href="structjose__io__t.html#afa8ec8ac8802fd2600466b9477730cfe">jose_io_t</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 412 - 0
doc/doxygen/html/group__jose__b64.html

@@ -0,0 +1,412 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Base64</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Base64</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>URL-safe Base64 Encoding &amp; Decoding.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf86ee58b51e590f9dac0bb29ee5800ff"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#gaf86ee58b51e590f9dac0bb29ee5800ff">jose_b64_dec</a> (const json_t *i, void *o, size_t ol)</td></tr>
+<tr class="memdesc:gaf86ee58b51e590f9dac0bb29ee5800ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decodes a URL-safe Base64 JSON string to a buffer.  <a href="#gaf86ee58b51e590f9dac0bb29ee5800ff">More...</a><br /></td></tr>
+<tr class="separator:gaf86ee58b51e590f9dac0bb29ee5800ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8e16b78e3713aacb5bdcdc16730a3a98"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#ga8e16b78e3713aacb5bdcdc16730a3a98">jose_b64_dec_io</a> (<a class="el" href="structjose__io__t.html">jose_io_t</a> *next)</td></tr>
+<tr class="memdesc:ga8e16b78e3713aacb5bdcdc16730a3a98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which performs URL-safe Base64 decoding.  <a href="#ga8e16b78e3713aacb5bdcdc16730a3a98">More...</a><br /></td></tr>
+<tr class="separator:ga8e16b78e3713aacb5bdcdc16730a3a98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga75953a3138781b2ad2809395587b1f44"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#ga75953a3138781b2ad2809395587b1f44">jose_b64_dec_buf</a> (const void *i, size_t il, void *o, size_t ol)</td></tr>
+<tr class="memdesc:ga75953a3138781b2ad2809395587b1f44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decodes a URL-safe Base64 buffer to an output buffer.  <a href="#ga75953a3138781b2ad2809395587b1f44">More...</a><br /></td></tr>
+<tr class="separator:ga75953a3138781b2ad2809395587b1f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1fa229e6903d5cc41403a2b137fcff18"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#ga1fa229e6903d5cc41403a2b137fcff18">jose_b64_dec_load</a> (const json_t *i)</td></tr>
+<tr class="memdesc:ga1fa229e6903d5cc41403a2b137fcff18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decodes a JSON string from a URL-safe Base64 JSON string.  <a href="#ga1fa229e6903d5cc41403a2b137fcff18">More...</a><br /></td></tr>
+<tr class="separator:ga1fa229e6903d5cc41403a2b137fcff18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8e19831335f6990bfea85d21b946e72"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#gab8e19831335f6990bfea85d21b946e72">jose_b64_enc</a> (const void *i, size_t il)</td></tr>
+<tr class="memdesc:gab8e19831335f6990bfea85d21b946e72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encodes data to a URL-safe Base64 JSON string.  <a href="#gab8e19831335f6990bfea85d21b946e72">More...</a><br /></td></tr>
+<tr class="separator:gab8e19831335f6990bfea85d21b946e72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad72c180de43c9da3456bdb0d166092ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff">jose_b64_enc_io</a> (<a class="el" href="structjose__io__t.html">jose_io_t</a> *next)</td></tr>
+<tr class="memdesc:gad72c180de43c9da3456bdb0d166092ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which performs URL-safe Base64 encoding.  <a href="#gad72c180de43c9da3456bdb0d166092ff">More...</a><br /></td></tr>
+<tr class="separator:gad72c180de43c9da3456bdb0d166092ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a35d8159cc76af42482df6db36543b0"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#ga2a35d8159cc76af42482df6db36543b0">jose_b64_enc_buf</a> (const void *i, size_t il, void *o, size_t ol)</td></tr>
+<tr class="memdesc:ga2a35d8159cc76af42482df6db36543b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encodes data to a URL-safe Base64 buffer.  <a href="#ga2a35d8159cc76af42482df6db36543b0">More...</a><br /></td></tr>
+<tr class="separator:ga2a35d8159cc76af42482df6db36543b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga244aaa61d745e3eb3dfa5fb4a204fa68"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__b64.html#ga244aaa61d745e3eb3dfa5fb4a204fa68">jose_b64_enc_dump</a> (const json_t *i)</td></tr>
+<tr class="memdesc:ga244aaa61d745e3eb3dfa5fb4a204fa68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encodes the input JSON as a URL-safe Base64 JSON string.  <a href="#ga244aaa61d745e3eb3dfa5fb4a204fa68">More...</a><br /></td></tr>
+<tr class="separator:ga244aaa61d745e3eb3dfa5fb4a204fa68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>URL-safe Base64 Encoding &amp; Decoding. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaf86ee58b51e590f9dac0bb29ee5800ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf86ee58b51e590f9dac0bb29ee5800ff">&#9670;&nbsp;</a></span>jose_b64_dec()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t jose_b64_dec </td>
+          <td>(</td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>o</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ol</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decodes a URL-safe Base64 JSON string to a buffer. </p>
+<p>If <code>o</code> is NULL, the number of output bytes necessary is returned.</p>
+<p>This function will never write more than <code>ol</code> bytes. If the output buffer is too small, an error will occur.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input URL-safe Base64 JSON string. </td></tr>
+    <tr><td class="paramname">o</td><td>The output buffer (may be NULL). </td></tr>
+    <tr><td class="paramname">ol</td><td>The size of the output buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of bytes that were (or would be) written. If an error occurs, SIZE_MAX is returned. </dd></dl>
+
+</div>
+</div>
+<a id="ga8e16b78e3713aacb5bdcdc16730a3a98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8e16b78e3713aacb5bdcdc16730a3a98">&#9670;&nbsp;</a></span>jose_b64_dec_io()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_b64_dec_io </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td>
+          <td class="paramname"><em>next</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which performs URL-safe Base64 decoding. </p>
+<p>All data written to the returned IO object will be decoded before passing it on to the next IO object in the chain.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">next</td><td>The next IO object in the chain. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga75953a3138781b2ad2809395587b1f44"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga75953a3138781b2ad2809395587b1f44">&#9670;&nbsp;</a></span>jose_b64_dec_buf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t jose_b64_dec_buf </td>
+          <td>(</td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>il</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>o</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ol</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decodes a URL-safe Base64 buffer to an output buffer. </p>
+<p>If <code>o</code> is NULL, the number of output bytes necessary is returned.</p>
+<p>This function will never write more than <code>ol</code> bytes. If the output buffer is too small, an error will occur.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input URL-safe Base64 buffer. </td></tr>
+    <tr><td class="paramname">il</td><td>The size of the data in the input buffer. </td></tr>
+    <tr><td class="paramname">o</td><td>The output buffer. </td></tr>
+    <tr><td class="paramname">ol</td><td>The size of the output buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of bytes that were (or would be) written. If an error occurs, SIZE_MAX is returned. </dd></dl>
+
+</div>
+</div>
+<a id="ga1fa229e6903d5cc41403a2b137fcff18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1fa229e6903d5cc41403a2b137fcff18">&#9670;&nbsp;</a></span>jose_b64_dec_load()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_b64_dec_load </td>
+          <td>(</td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>i</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decodes a JSON string from a URL-safe Base64 JSON string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input URL-safe Base64 JSON string containing JSON data. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The output JSON data. </dd></dl>
+
+</div>
+</div>
+<a id="gab8e19831335f6990bfea85d21b946e72"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab8e19831335f6990bfea85d21b946e72">&#9670;&nbsp;</a></span>jose_b64_enc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_b64_enc </td>
+          <td>(</td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>il</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encodes data to a URL-safe Base64 JSON string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input buffer. </td></tr>
+    <tr><td class="paramname">il</td><td>The size of the data in the input buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The decoded JSON data. If an error occurs, NULL is returned. </dd></dl>
+
+</div>
+</div>
+<a id="gad72c180de43c9da3456bdb0d166092ff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad72c180de43c9da3456bdb0d166092ff">&#9670;&nbsp;</a></span>jose_b64_enc_io()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_b64_enc_io </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td>
+          <td class="paramname"><em>next</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which performs URL-safe Base64 encoding. </p>
+<p>All data written to the returned IO object will be encoded before passing it on to the next IO object in the chain.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">next</td><td>The next IO object in the chain. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga2a35d8159cc76af42482df6db36543b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2a35d8159cc76af42482df6db36543b0">&#9670;&nbsp;</a></span>jose_b64_enc_buf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t jose_b64_enc_buf </td>
+          <td>(</td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>il</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>o</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>ol</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encodes data to a URL-safe Base64 buffer. </p>
+<p>If <code>o</code> is NULL, the number of output bytes necessary is returned.</p>
+<p>This function will never write more than <code>ol</code> bytes. If the output buffer is too small, an error will occur.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input buffer. </td></tr>
+    <tr><td class="paramname">il</td><td>The size of the data in the input buffer. </td></tr>
+    <tr><td class="paramname">o</td><td>The output URL-safe Base64 buffer. </td></tr>
+    <tr><td class="paramname">ol</td><td>The size of the output buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The number of bytes that were (or would be) written. If an error occurs, SIZE_MAX is returned. </dd></dl>
+
+</div>
+</div>
+<a id="ga244aaa61d745e3eb3dfa5fb4a204fa68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga244aaa61d745e3eb3dfa5fb4a204fa68">&#9670;&nbsp;</a></span>jose_b64_enc_dump()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_b64_enc_dump </td>
+          <td>(</td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>i</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encodes the input JSON as a URL-safe Base64 JSON string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>The input JSON data. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The output URL-safe Base64 JSON string. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 331 - 0
doc/doxygen/html/group__jose__cfg.html

@@ -0,0 +1,331 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Config</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Config</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>José Configuration.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaf1dca939bc91e5f203f440307240b08f"><td class="memItemLeft" align="right" valign="top">typedef jose_cfg_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#gaf1dca939bc91e5f203f440307240b08f">jose_cfg_auto_t</a></td></tr>
+<tr class="memdesc:gaf1dca939bc91e5f203f440307240b08f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Defines a jose_cfg_t which calls <a class="el" href="group__jose__cfg.html#ga30ea7bdd659e6f8620f3d4d72ed2f87a" title="Decreases the reference count of a configuration instance. ">jose_cfg_decref()</a> at end of scope.  <a href="#gaf1dca939bc91e5f203f440307240b08f">More...</a><br /></td></tr>
+<tr class="separator:gaf1dca939bc91e5f203f440307240b08f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6d89919bf7dd7969cefdb113c49a61e6"><td class="memItemLeft" align="right" valign="top">jose_cfg_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga6d89919bf7dd7969cefdb113c49a61e6">jose_cfg</a> (void)</td></tr>
+<tr class="memdesc:ga6d89919bf7dd7969cefdb113c49a61e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new configuration instance.  <a href="#ga6d89919bf7dd7969cefdb113c49a61e6">More...</a><br /></td></tr>
+<tr class="separator:ga6d89919bf7dd7969cefdb113c49a61e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1c0caea470553360b15b312a123c7ce4"><td class="memItemLeft" align="right" valign="top">jose_cfg_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga1c0caea470553360b15b312a123c7ce4">jose_cfg_incref</a> (jose_cfg_t *cfg)</td></tr>
+<tr class="memdesc:ga1c0caea470553360b15b312a123c7ce4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Increases the reference count of a configuration instance.  <a href="#ga1c0caea470553360b15b312a123c7ce4">More...</a><br /></td></tr>
+<tr class="separator:ga1c0caea470553360b15b312a123c7ce4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga30ea7bdd659e6f8620f3d4d72ed2f87a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga30ea7bdd659e6f8620f3d4d72ed2f87a">jose_cfg_decref</a> (jose_cfg_t *cfg)</td></tr>
+<tr class="memdesc:ga30ea7bdd659e6f8620f3d4d72ed2f87a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decreases the reference count of a configuration instance.  <a href="#ga30ea7bdd659e6f8620f3d4d72ed2f87a">More...</a><br /></td></tr>
+<tr class="separator:ga30ea7bdd659e6f8620f3d4d72ed2f87a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2383b689e066b463b0e62b6f9853295f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga2383b689e066b463b0e62b6f9853295f">jose_cfg_set_err_func</a> (jose_cfg_t *cfg, jose_cfg_err_t *err, void *misc)</td></tr>
+<tr class="memdesc:ga2383b689e066b463b0e62b6f9853295f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the error handler function for this configuration instance.  <a href="#ga2383b689e066b463b0e62b6f9853295f">More...</a><br /></td></tr>
+<tr class="separator:ga2383b689e066b463b0e62b6f9853295f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga92220346ca7051fd44685b71dbc5ce3c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga92220346ca7051fd44685b71dbc5ce3c">jose_cfg_get_err_misc</a> (jose_cfg_t *cfg)</td></tr>
+<tr class="memdesc:ga92220346ca7051fd44685b71dbc5ce3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the miscellaneous data associated with the current error handler.  <a href="#ga92220346ca7051fd44685b71dbc5ce3c">More...</a><br /></td></tr>
+<tr class="separator:ga92220346ca7051fd44685b71dbc5ce3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8193855cf711805afc0bbcfe03b9faf4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__cfg.html#ga8193855cf711805afc0bbcfe03b9faf4">jose_cfg_err</a> (jose_cfg_t *cfg, uint64_t err, const char *fmt,...)</td></tr>
+<tr class="memdesc:ga8193855cf711805afc0bbcfe03b9faf4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Submit an error.  <a href="#ga8193855cf711805afc0bbcfe03b9faf4">More...</a><br /></td></tr>
+<tr class="separator:ga8193855cf711805afc0bbcfe03b9faf4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>José Configuration. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gaf1dca939bc91e5f203f440307240b08f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf1dca939bc91e5f203f440307240b08f">&#9670;&nbsp;</a></span>jose_cfg_auto_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef jose_cfg_t <a class="el" href="group__jose__cfg.html#gaf1dca939bc91e5f203f440307240b08f">jose_cfg_auto_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Defines a jose_cfg_t which calls <a class="el" href="group__jose__cfg.html#ga30ea7bdd659e6f8620f3d4d72ed2f87a" title="Decreases the reference count of a configuration instance. ">jose_cfg_decref()</a> at end of scope. </p>
+<p>For example: </p><pre class="fragment">void foo() {
+    jose_cfg_auto_t *cfg = jose_cfg();
+    // jose_cfg_decref() implicitly called
+}</pre> 
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga6d89919bf7dd7969cefdb113c49a61e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6d89919bf7dd7969cefdb113c49a61e6">&#9670;&nbsp;</a></span>jose_cfg()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">jose_cfg_t* jose_cfg </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new configuration instance. </p>
+<dl class="section return"><dt>Returns</dt><dd>A newly-allocated configuration instance. </dd></dl>
+
+</div>
+</div>
+<a id="ga1c0caea470553360b15b312a123c7ce4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1c0caea470553360b15b312a123c7ce4">&#9670;&nbsp;</a></span>jose_cfg_incref()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">jose_cfg_t* jose_cfg_incref </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Increases the reference count of a configuration instance. </p>
+<p>This function always succeeds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The value of <code>cfg</code> (for convenience). </dd></dl>
+
+</div>
+</div>
+<a id="ga30ea7bdd659e6f8620f3d4d72ed2f87a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga30ea7bdd659e6f8620f3d4d72ed2f87a">&#9670;&nbsp;</a></span>jose_cfg_decref()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void jose_cfg_decref </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decreases the reference count of a configuration instance. </p>
+<p>When the reference count reaches zero, the configuration instance is freed.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga2383b689e066b463b0e62b6f9853295f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2383b689e066b463b0e62b6f9853295f">&#9670;&nbsp;</a></span>jose_cfg_set_err_func()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void jose_cfg_set_err_func </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">jose_cfg_err_t *&#160;</td>
+          <td class="paramname"><em>err</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>misc</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sets the error handler function for this configuration instance. </p>
+<p>The value of <code>misc</code> will be passed to the error handler function.</p>
+<p>You may pass NULL to <code>err</code> to return to the default error handler.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context. </td></tr>
+    <tr><td class="paramname">err</td><td>The error handler function you wish to enable. </td></tr>
+    <tr><td class="paramname">misc</td><td>The miscellaneous data you wish to pass to the error handler. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga92220346ca7051fd44685b71dbc5ce3c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga92220346ca7051fd44685b71dbc5ce3c">&#9670;&nbsp;</a></span>jose_cfg_get_err_misc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* jose_cfg_get_err_misc </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Gets the miscellaneous data associated with the current error handler. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The miscellaneous data associated with the error handler. </dd></dl>
+
+</div>
+</div>
+<a id="ga8193855cf711805afc0bbcfe03b9faf4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8193855cf711805afc0bbcfe03b9faf4">&#9670;&nbsp;</a></span>jose_cfg_err()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void jose_cfg_err </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>err</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>fmt</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Submit an error. </p>
+<p>The error handler will be called with the error provided.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">err</td><td>The number corresponding to this error type. </td></tr>
+    <tr><td class="paramname">fmt</td><td>A printf()-style format string. </td></tr>
+    <tr><td class="paramname">...</td><td>The printf()-style arguments. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 406 - 0
doc/doxygen/html/group__jose__io.html

@@ -0,0 +1,406 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: IO</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">IO</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>IO Chaining.  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structjose__io__t.html">jose_io_t</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The interface for chained IO.  <a href="structjose__io__t.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga5470c8ebb2993293197844f2782616b5"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structjose__io__t.html">jose_io_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#ga5470c8ebb2993293197844f2782616b5">jose_io_auto_t</a></td></tr>
+<tr class="memdesc:ga5470c8ebb2993293197844f2782616b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Defines a <a class="el" href="structjose__io__t.html" title="The interface for chained IO. ">jose_io_t</a> which calls <a class="el" href="group__jose__io.html#ga399c2d4e43b0def36e831cc12a50877e" title="Decreases the reference count of an IO object. ">jose_io_decref()</a> at end of scope.  <a href="#ga5470c8ebb2993293197844f2782616b5">More...</a><br /></td></tr>
+<tr class="separator:ga5470c8ebb2993293197844f2782616b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7fbb0f97c47943576a424a0351df2413"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#ga7fbb0f97c47943576a424a0351df2413">jose_io_incref</a> (<a class="el" href="structjose__io__t.html">jose_io_t</a> *io)</td></tr>
+<tr class="memdesc:ga7fbb0f97c47943576a424a0351df2413"><td class="mdescLeft">&#160;</td><td class="mdescRight">Increases the reference count of an IO object.  <a href="#ga7fbb0f97c47943576a424a0351df2413">More...</a><br /></td></tr>
+<tr class="separator:ga7fbb0f97c47943576a424a0351df2413"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga399c2d4e43b0def36e831cc12a50877e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#ga399c2d4e43b0def36e831cc12a50877e">jose_io_decref</a> (<a class="el" href="structjose__io__t.html">jose_io_t</a> *io)</td></tr>
+<tr class="memdesc:ga399c2d4e43b0def36e831cc12a50877e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decreases the reference count of an IO object.  <a href="#ga399c2d4e43b0def36e831cc12a50877e">More...</a><br /></td></tr>
+<tr class="separator:ga399c2d4e43b0def36e831cc12a50877e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3f3eb70079093e1244ffe516fd1627f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f">jose_io_malloc</a> (jose_cfg_t *cfg, void **buf, size_t *len)</td></tr>
+<tr class="memdesc:gaa3f3eb70079093e1244ffe516fd1627f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which collects data into a dynamic buffer.  <a href="#gaa3f3eb70079093e1244ffe516fd1627f">More...</a><br /></td></tr>
+<tr class="separator:gaa3f3eb70079093e1244ffe516fd1627f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4912707bb8e60870c661fb14e837bb69"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#ga4912707bb8e60870c661fb14e837bb69">jose_io_malloc_steal</a> (void **buf)</td></tr>
+<tr class="memdesc:ga4912707bb8e60870c661fb14e837bb69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Steals the buffer created by the <a class="el" href="group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f" title="Creates a new IO object which collects data into a dynamic buffer. ">jose_io_malloc()</a> IO object.  <a href="#ga4912707bb8e60870c661fb14e837bb69">More...</a><br /></td></tr>
+<tr class="separator:ga4912707bb8e60870c661fb14e837bb69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf9372e0f4d1c3d6ece6c38f31ea7c48c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#gaf9372e0f4d1c3d6ece6c38f31ea7c48c">jose_io_buffer</a> (jose_cfg_t *cfg, void *buf, size_t *len)</td></tr>
+<tr class="memdesc:gaf9372e0f4d1c3d6ece6c38f31ea7c48c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which collects data into a static buffer.  <a href="#gaf9372e0f4d1c3d6ece6c38f31ea7c48c">More...</a><br /></td></tr>
+<tr class="separator:gaf9372e0f4d1c3d6ece6c38f31ea7c48c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa249153384969267f4d3f8d9691e2bef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#gaa249153384969267f4d3f8d9691e2bef">jose_io_file</a> (jose_cfg_t *cfg, FILE *file)</td></tr>
+<tr class="memdesc:gaa249153384969267f4d3f8d9691e2bef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which writes data into a FILE.  <a href="#gaa249153384969267f4d3f8d9691e2bef">More...</a><br /></td></tr>
+<tr class="separator:gaa249153384969267f4d3f8d9691e2bef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6ea7adf304754afee8b6ec33597991f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__io.html#ga6ea7adf304754afee8b6ec33597991f7">jose_io_multiplex</a> (jose_cfg_t *cfg, <a class="el" href="structjose__io__t.html">jose_io_t</a> **nexts, bool all)</td></tr>
+<tr class="memdesc:ga6ea7adf304754afee8b6ec33597991f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new IO object which multiplexes data into multiple IO objects.  <a href="#ga6ea7adf304754afee8b6ec33597991f7">More...</a><br /></td></tr>
+<tr class="separator:ga6ea7adf304754afee8b6ec33597991f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>IO Chaining. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga5470c8ebb2993293197844f2782616b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5470c8ebb2993293197844f2782616b5">&#9670;&nbsp;</a></span>jose_io_auto_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structjose__io__t.html">jose_io_t</a> <a class="el" href="group__jose__io.html#ga5470c8ebb2993293197844f2782616b5">jose_io_auto_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Defines a <a class="el" href="structjose__io__t.html" title="The interface for chained IO. ">jose_io_t</a> which calls <a class="el" href="group__jose__io.html#ga399c2d4e43b0def36e831cc12a50877e" title="Decreases the reference count of an IO object. ">jose_io_decref()</a> at end of scope. </p>
+<p>For example: </p><pre class="fragment">void foo() {
+    uint8_t *buf = NULL;
+    size_t len = 0;
+    jose_io_auto_t *io = jose_io_malloc(NULL, &amp;buf, &amp;len);
+    // jose_io_decref() implicitly called
+}</pre> 
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga7fbb0f97c47943576a424a0351df2413"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7fbb0f97c47943576a424a0351df2413">&#9670;&nbsp;</a></span>jose_io_incref()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_io_incref </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td>
+          <td class="paramname"><em>io</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Increases the reference count of an IO object. </p>
+<p>This function always succeeds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">io</td><td>The <a class="el" href="structjose__io__t.html" title="The interface for chained IO. ">jose_io_t</a> entity you are using. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The value of <code>io</code> (for convenience). </dd></dl>
+
+</div>
+</div>
+<a id="ga399c2d4e43b0def36e831cc12a50877e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga399c2d4e43b0def36e831cc12a50877e">&#9670;&nbsp;</a></span>jose_io_decref()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void jose_io_decref </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td>
+          <td class="paramname"><em>io</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Decreases the reference count of an IO object. </p>
+<p>When the reference count reaches zero, io-&gt;free() is called.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">io</td><td>The <a class="el" href="structjose__io__t.html" title="The interface for chained IO. ">jose_io_t</a> entity you are using. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="gaa3f3eb70079093e1244ffe516fd1627f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa3f3eb70079093e1244ffe516fd1627f">&#9670;&nbsp;</a></span>jose_io_malloc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_io_malloc </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which collects data into a dynamic buffer. </p>
+<p>The dynamic buffer is allocated into the <code>buf</code> pointer you provided and the length of the buffer is stored in <code>len</code>. The pointer referenced by <code>buf</code> must remain valid for the entire duration of the returned IO object.</p>
+<p>The default behavior is for the IO object to zero and free the buffer when it is freed. This means that, by default, you own the buffer pointer but the buffer itself is owned by the IO object. You can, however, steal the buffer by setting the buffer pointer to NULL.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__jose__io.html#ga4912707bb8e60870c661fb14e837bb69" title="Steals the buffer created by the jose_io_malloc() IO object. ">jose_io_malloc_steal()</a> </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">buf</td><td>A buffer pointer pointer. </td></tr>
+    <tr><td class="paramname">len</td><td>A pointer to the length of the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga4912707bb8e60870c661fb14e837bb69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4912707bb8e60870c661fb14e837bb69">&#9670;&nbsp;</a></span>jose_io_malloc_steal()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* jose_io_malloc_steal </td>
+          <td>(</td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>buf</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Steals the buffer created by the <a class="el" href="group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f" title="Creates a new IO object which collects data into a dynamic buffer. ">jose_io_malloc()</a> IO object. </p>
+<p>This convenience function simply returns the value of <code>*buf</code> and then sets <code>*buf</code> to NULL.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f" title="Creates a new IO object which collects data into a dynamic buffer. ">jose_io_malloc()</a> </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">buf</td><td>A pointer to the buffer pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The value of <code>*buf</code> before it is set to NULL. </dd></dl>
+
+</div>
+</div>
+<a id="gaf9372e0f4d1c3d6ece6c38f31ea7c48c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf9372e0f4d1c3d6ece6c38f31ea7c48c">&#9670;&nbsp;</a></span>jose_io_buffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_io_buffer </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which collects data into a static buffer. </p>
+<p>The size of <code>buf</code> MUST be specified in the variable pointed to by <code>len</code>. This will be the maximum data written. However, after the function returns, the variable pointed to by <code>len</code> will contain the current length of data in the buffer.</p>
+<p>Unlike <a class="el" href="group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f" title="Creates a new IO object which collects data into a dynamic buffer. ">jose_io_malloc()</a>, you own the buffer and it is not zeroed or freed when the IO object is freed.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">buf</td><td>A buffer pointer. </td></tr>
+    <tr><td class="paramname">len</td><td>A pointer to the length of the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="gaa249153384969267f4d3f8d9691e2bef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa249153384969267f4d3f8d9691e2bef">&#9670;&nbsp;</a></span>jose_io_file()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_io_file </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FILE *&#160;</td>
+          <td class="paramname"><em>file</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which writes data into a FILE. </p>
+<p>This function DOES NOT take ownership of the FILE. You are still responsible for calling fclose() at the appropriate time.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">file</td><td>The output file which MUST be opened for writing or appending. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga6ea7adf304754afee8b6ec33597991f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6ea7adf304754afee8b6ec33597991f7">&#9670;&nbsp;</a></span>jose_io_multiplex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_io_multiplex </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="structjose__io__t.html">jose_io_t</a> **&#160;</td>
+          <td class="paramname"><em>nexts</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>all</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates a new IO object which multiplexes data into multiple IO objects. </p>
+<p>If <code>all</code> is true, the success of all <code>nexts</code> is required. Otherwise, all but one of the <code>nexts</code> can fail before the error is propagated upward.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">nexts</td><td>A NULL-terminated array of IO object pointers. </td></tr>
+    <tr><td class="paramname">all</td><td>Whether or not the success of all <code>nexts</code> is required. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

File diff suppressed because it is too large
+ 831 - 0
doc/doxygen/html/group__jose__jwe.html


+ 419 - 0
doc/doxygen/html/group__jose__jwk.html

@@ -0,0 +1,419 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: JWK</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">JWK</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>JSON Web Keys (RFC 7517)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac4daef7aeb077caaa459f07af353e9a8"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#gac4daef7aeb077caaa459f07af353e9a8">jose_jwk_gen</a> (jose_cfg_t *cfg, json_t *jwk)</td></tr>
+<tr class="memdesc:gac4daef7aeb077caaa459f07af353e9a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a new JWK.  <a href="#gac4daef7aeb077caaa459f07af353e9a8">More...</a><br /></td></tr>
+<tr class="separator:gac4daef7aeb077caaa459f07af353e9a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3ebb220fa6f93ad00c6589400c1a441c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#ga3ebb220fa6f93ad00c6589400c1a441c">jose_jwk_pub</a> (jose_cfg_t *cfg, json_t *jwk)</td></tr>
+<tr class="memdesc:ga3ebb220fa6f93ad00c6589400c1a441c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes all private key material from a JWK.  <a href="#ga3ebb220fa6f93ad00c6589400c1a441c">More...</a><br /></td></tr>
+<tr class="separator:ga3ebb220fa6f93ad00c6589400c1a441c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa2023d0376c2e5ca14c2177f80f8ecd5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#gaa2023d0376c2e5ca14c2177f80f8ecd5">jose_jwk_prm</a> (jose_cfg_t *cfg, const json_t *jwk, bool req, const char *op)</td></tr>
+<tr class="memdesc:gaa2023d0376c2e5ca14c2177f80f8ecd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if an operation is permitted for a JWK.  <a href="#gaa2023d0376c2e5ca14c2177f80f8ecd5">More...</a><br /></td></tr>
+<tr class="separator:gaa2023d0376c2e5ca14c2177f80f8ecd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4f5d2e9dc5f9e24646808b502b87b764"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#ga4f5d2e9dc5f9e24646808b502b87b764">jose_jwk_thp</a> (jose_cfg_t *cfg, const json_t *jwk, const char *alg)</td></tr>
+<tr class="memdesc:ga4f5d2e9dc5f9e24646808b502b87b764"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the thumbprint of a JWK as a URL-safe Base64 encoded JSON string.  <a href="#ga4f5d2e9dc5f9e24646808b502b87b764">More...</a><br /></td></tr>
+<tr class="separator:ga4f5d2e9dc5f9e24646808b502b87b764"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga03f820f8de4e63ffe2feb3490236040e"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#ga03f820f8de4e63ffe2feb3490236040e">jose_jwk_thp_buf</a> (jose_cfg_t *cfg, const json_t *jwk, const char *alg, uint8_t *thp, size_t len)</td></tr>
+<tr class="memdesc:ga03f820f8de4e63ffe2feb3490236040e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the thumbprint of a JWK.  <a href="#ga03f820f8de4e63ffe2feb3490236040e">More...</a><br /></td></tr>
+<tr class="separator:ga03f820f8de4e63ffe2feb3490236040e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9977a603c39b1b7c545f3f0c3dd0a7ef"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jwk.html#ga9977a603c39b1b7c545f3f0c3dd0a7ef">jose_jwk_exc</a> (jose_cfg_t *cfg, const json_t *prv, const json_t *pub)</td></tr>
+<tr class="memdesc:ga9977a603c39b1b7c545f3f0c3dd0a7ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform a key exchange.  <a href="#ga9977a603c39b1b7c545f3f0c3dd0a7ef">More...</a><br /></td></tr>
+<tr class="separator:ga9977a603c39b1b7c545f3f0c3dd0a7ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>JSON Web Keys (RFC 7517) </p>
+<p>A JSON Web Key (JWS) is a standard data format for expresing cryptographic keys in JSON.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7517">https://tools.ietf.org/html/rfc7517</a> </dd>
+<dd>
+<a href="https://tools.ietf.org/html/rfc7638">https://tools.ietf.org/html/rfc7638</a> </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gac4daef7aeb077caaa459f07af353e9a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac4daef7aeb077caaa459f07af353e9a8">&#9670;&nbsp;</a></span>jose_jwk_gen()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool jose_jwk_gen </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Generates a new JWK. </p>
+<p>The JWK is generated using hints from the input in exactly the same format as you would find in the output. For example, the most common way to generate a key is to specify the algorithm you'd like to use the key with. For example (error handling omitted): </p><pre class="fragment">json_t *gen(void) {
+    json_auto_t *jwk = json_pack("{s:s}", "alg", "ES256");
+    jose_jwk_gen(NULL, jwk);
+    return json_incref(jwk);
+}
+</pre><p>This method is preferred because other metadata can be inferred from the algorithm name, such as the key usage. Additionally, the algorithm metadata can be used to automatically generate correct headers when creating signatures (JWS) or encryptions (JWE). Thus, you should always default to creating keys by their algorithm usage.</p>
+<p>However, should your requirements differ, you can also generate a key using raw parameters (again, error handling omitted): </p><pre class="fragment">json_t *gen(void) {
+    json_auto_t *jwk = json_pack("{s:s,s:s}", "kty", "EC", "crv", "P-256");
+    jose_jwk_gen(NULL, jwk);
+    return json_incref(jwk);
+}
+
+json_t *gen(void) {
+    json_auto_t *jwk = json_pack("{s:s,s:i}", "kty", "RSA", "bits", 2048);
+    jose_jwk_gen(NULL, jwk);
+    return json_incref(jwk);
+}
+
+json_t *gen(void) {
+    json_auto_t *jwk = json_pack("{s:s,s:i}", "kty", "oct", "bytes", 32);
+    jose_jwk_gen(NULL, jwk);
+    return json_incref(jwk);
+}
+</pre><p>In this case, "bits" and "bytes" will be removed from the final output.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms">https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms</a> </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK to generate. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
+
+</div>
+</div>
+<a id="ga3ebb220fa6f93ad00c6589400c1a441c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3ebb220fa6f93ad00c6589400c1a441c">&#9670;&nbsp;</a></span>jose_jwk_pub()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool jose_jwk_pub </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Removes all private key material from a JWK. </p>
+<p>In addition, this function will remove any key operations from the <code>key_ops</code> JWK property (if present) that apply only to the private key.</p>
+<p>This function should be used before exporting keys to third parties.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK to remove private keys from. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
+
+</div>
+</div>
+<a id="gaa2023d0376c2e5ca14c2177f80f8ecd5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa2023d0376c2e5ca14c2177f80f8ecd5">&#9670;&nbsp;</a></span>jose_jwk_prm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool jose_jwk_prm </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>req</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>op</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Determines if an operation is permitted for a JWK. </p>
+<p>The operation to be confirmed (<code>op</code>) is always specified according to the syntax of the "key_ops" JWK property, even when the "use" property is defined on the JWK.</p>
+<p>This function has two modes of operation. If <code>req</code> is false, then JWKs which do not have any key use metadata will be approved for this operation. However, if <code>req</code> is true then this metadata will be required for approval.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK from which to remove private keys. </td></tr>
+    <tr><td class="paramname">req</td><td>Whether JWK key use metadata is required or not. </td></tr>
+    <tr><td class="paramname">op</td><td>The opperation to seek approval for. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>When the JWK is approved, true. Otherwise, false. </dd></dl>
+
+</div>
+</div>
+<a id="ga4f5d2e9dc5f9e24646808b502b87b764"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4f5d2e9dc5f9e24646808b502b87b764">&#9670;&nbsp;</a></span>jose_jwk_thp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_jwk_thp </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>alg</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calculates the thumbprint of a JWK as a URL-safe Base64 encoded JSON string. </p>
+<p>This function is a thin wrapper around <a class="el" href="group__jose__jwk.html#ga03f820f8de4e63ffe2feb3490236040e" title="Calculates the thumbprint of a JWK. ">jose_jwk_thp_buf()</a>.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__jose__jwk.html#ga03f820f8de4e63ffe2feb3490236040e" title="Calculates the thumbprint of a JWK. ">jose_jwk_thp_buf()</a> </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK to calculate the thumbprint for. </td></tr>
+    <tr><td class="paramname">alg</td><td>The hash algorithm to use. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, a newly-allocated JSON string. Otherwise, NULL. </dd></dl>
+
+</div>
+</div>
+<a id="ga03f820f8de4e63ffe2feb3490236040e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga03f820f8de4e63ffe2feb3490236040e">&#9670;&nbsp;</a></span>jose_jwk_thp_buf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t jose_jwk_thp_buf </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>alg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>thp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calculates the thumbprint of a JWK. </p>
+<p>This function calculates the thumbprint of a JWK according to the method defined by RFC 7638.</p>
+<p>If <code>thp</code> is NULL, this function returns the size of the buffer required for the thumbprint output.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7638">https://tools.ietf.org/html/rfc7638</a> </dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK to calculate the thumbprint for. </td></tr>
+    <tr><td class="paramname">alg</td><td>The hash algorithm to use. </td></tr>
+    <tr><td class="paramname">thp</td><td>The output hash buffer. </td></tr>
+    <tr><td class="paramname">len</td><td>The size of the output hash buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, the number of bytes written. Otherwise, SIZE_MAX. </dd></dl>
+
+</div>
+</div>
+<a id="ga9977a603c39b1b7c545f3f0c3dd0a7ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9977a603c39b1b7c545f3f0c3dd0a7ef">&#9670;&nbsp;</a></span>jose_jwk_exc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_jwk_exc </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>prv</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>pub</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Perform a key exchange. </p>
+<p>The only currently implemented algorithm is ECDH.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">prv</td><td>The private JWK. </td></tr>
+    <tr><td class="paramname">pub</td><td>The public JWK. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, the JWK result of the key exchange. Otherwise, NULL. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 395 - 0
doc/doxygen/html/group__jose__jws.html

@@ -0,0 +1,395 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: JWS</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">JWS</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>JSON Web Signature (RFC 7515)  
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="memItemLeft" align="right" valign="top">json_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga25b7bfa0fc1293dbe349d2870479f80a">jose_jws_hdr</a> (const json_t *sig)</td></tr>
+<tr class="memdesc:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Merges the JOSE headers of a JWS signature object.  <a href="#ga25b7bfa0fc1293dbe349d2870479f80a">More...</a><br /></td></tr>
+<tr class="separator:ga25b7bfa0fc1293dbe349d2870479f80a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350">jose_jws_sig</a> (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)</td></tr>
+<tr class="memdesc:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates one or more signatures in a JWS object.  <a href="#ga562d39b9b1d0ba321f9246e4d4c3b350">More...</a><br /></td></tr>
+<tr class="separator:ga562d39b9b1d0ba321f9246e4d4c3b350"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga73152ceaf852dd2d897154fb250a7860"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga73152ceaf852dd2d897154fb250a7860">jose_jws_sig_io</a> (jose_cfg_t *cfg, json_t *jws, json_t *sig, const json_t *jwk)</td></tr>
+<tr class="memdesc:ga73152ceaf852dd2d897154fb250a7860"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates one or more signatures in a JWS object using streaming.  <a href="#ga73152ceaf852dd2d897154fb250a7860">More...</a><br /></td></tr>
+<tr class="separator:ga73152ceaf852dd2d897154fb250a7860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7">jose_jws_ver</a> (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)</td></tr>
+<tr class="memdesc:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies signatures of one or more JWKs in a JWS object.  <a href="#ga89a18c4b4d7cd0f9d42224ef5698abe7">More...</a><br /></td></tr>
+<tr class="separator:ga89a18c4b4d7cd0f9d42224ef5698abe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga35a5d3c37101fc127933f3c856b46cc8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structjose__io__t.html">jose_io_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__jose__jws.html#ga35a5d3c37101fc127933f3c856b46cc8">jose_jws_ver_io</a> (jose_cfg_t *cfg, const json_t *jws, const json_t *sig, const json_t *jwk, bool all)</td></tr>
+<tr class="memdesc:ga35a5d3c37101fc127933f3c856b46cc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies signatures of one or more JWKs in a JWS object using streaming.  <a href="#ga35a5d3c37101fc127933f3c856b46cc8">More...</a><br /></td></tr>
+<tr class="separator:ga35a5d3c37101fc127933f3c856b46cc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>JSON Web Signature (RFC 7515) </p>
+<p>JSON Web Token (RFC 7519)</p>
+<p>A JSON Web Signature (JWS) is a standard data format for expresing cryptographic signatures in JSON. The signatures are produced using a JSON Web Key (JWK).</p>
+<p>For example, to create a simple signature of a string using a JWK (error handling omitted): </p><pre class="fragment">json_t *sig(const char *str, const json_t *jwk) {
+    json_auto_t *jws = json_pack("{s:o}", "payload",
+                                 jose_b64_enc(str, strlen(str)));
+    jose_jws_sig(NULL, jws, NULL, jwk);
+    return json_incref(jws);
+}
+</pre><p>Likewise, to verify this signature (again, error handling omitted): </p><pre class="fragment">char *ver(const json_t *jwe, const json_t *jwk) {
+    char *str = NULL;
+    size_t len = 0;
+
+    if (!jose_jws_ver(NULL, jws, NULL, jwk))
+        return NULL;
+
+    len = jose_b64_dec(json_object_get(jwe, "payload"), NULL, 0);
+    str = calloc(1, len + 1);
+    jose_b64_dec(json_object_get(jwe, "payload"), str, len);
+    return str;
+}
+</pre><dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7515">https://tools.ietf.org/html/rfc7515</a></dd></dl>
+<p>A JSON Web Token (JWT) is a standard data format for expresing claims transferred between to parties in JSON. The JWT is wrapped in any number of Signatures (JWS) or Encryptions (JWE).</p>
+<dl class="section see"><dt>See also</dt><dd><a href="https://tools.ietf.org/html/rfc7515">https://tools.ietf.org/html/rfc7515</a> </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga25b7bfa0fc1293dbe349d2870479f80a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga25b7bfa0fc1293dbe349d2870479f80a">&#9670;&nbsp;</a></span>jose_jws_hdr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">json_t* jose_jws_hdr </td>
+          <td>(</td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>sig</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Merges the JOSE headers of a JWS signature object. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">sig</td><td>A JWS signature object. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The newly allocated JOSE header. </dd></dl>
+
+</div>
+</div>
+<a id="ga562d39b9b1d0ba321f9246e4d4c3b350"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga562d39b9b1d0ba321f9246e4d4c3b350">&#9670;&nbsp;</a></span>jose_jws_sig()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool jose_jws_sig </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>jws</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>sig</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates one or more signatures in a JWS object. </p>
+<p>The JWS object (<code>jws</code>) must contain the "payload" property.</p>
+<p>All signatures created will be appended to the JWS specified by <code>jws</code>. If the resulting JWS (<code>jws</code>) would contain only a single signature, the JWS will be represented in Flattened JWS JSON Serialization Syntax. Otherwise, it will be represented in General JWS JSON Serialization Syntax.</p>
+<p>If <code>jwk</code> contains a JWK, a single signature is created. In this case, <code>jws</code> must contain either a JWS signature object template or NULL. You may specify algorithms or other signature behaviors simply by specifying them in the JOSE headers of the JWS signature object template as defined by RFC 7515. If a required property is missing, sensible defaults will be used and inserted into the JOSE headers; inferring them from the JWK (<code>jwk</code>) where possible.</p>
+<p>If <code>jwk</code> contains an array of JWKs or a JWKSet, multiple signatures are created. In this case, the <code>sig</code> parameter must contain one of the following values:</p>
+<ol type="1">
+<li>A JWS signature object template that will be used for all signatures. In this case, a copy will be made for each signature and <code>sig</code> will not be modified in any way.</li>
+<li>An array of JWS signature object templates. Each template will be used with its corresponding JWK from <code>jwk</code>. If the arrays in <code>sig</code> and <code>jwk</code> are a different size, an error will occur.</li>
+<li>NULL. This has the same effect as passing NULL for each separate key.</li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
+    <tr><td class="paramname">sig</td><td>The JWS signature object template(s) or NULL. </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for creating signatures. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
+
+</div>
+</div>
+<a id="ga73152ceaf852dd2d897154fb250a7860"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga73152ceaf852dd2d897154fb250a7860">&#9670;&nbsp;</a></span>jose_jws_sig_io()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_jws_sig_io </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>jws</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">json_t *&#160;</td>
+          <td class="paramname"><em>sig</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Creates one or more signatures in a JWS object using streaming. </p>
+<p>This function behaves substantially like <a class="el" href="group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350" title="Creates one or more signatures in a JWS object. ">jose_jws_sig()</a> except:</p>
+<p>The payload is not specified in the JWS (<code>jws</code>). Rather, the payload is provided using the returned IO object. The input to the returned IO object will not be internally Base64 encoded. So you may need to prepend the IO chain with the result of <a class="el" href="group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff" title="Creates a new IO object which performs URL-safe Base64 encoding. ">jose_b64_enc_io()</a> (depending on your situation).</p>
+<p>Likewise, the payload is not stored in the JWS object (<code>jws</code>). This allows for detached payloads and decreases memory use for signatures over large payloads. If you would like to attach the payload, it is your responsibility to do so manually.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
+    <tr><td class="paramname">sig</td><td>The JWS signature object template(s) or NULL. </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for creating signatures. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga89a18c4b4d7cd0f9d42224ef5698abe7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga89a18c4b4d7cd0f9d42224ef5698abe7">&#9670;&nbsp;</a></span>jose_jws_ver()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool jose_jws_ver </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jws</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>sig</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>all</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Verifies signatures of one or more JWKs in a JWS object. </p>
+<p>The JWS object (<code>jws</code>) must contain the "payload" property.</p>
+<p>If a single JWK (<code>jwk</code>) is specified, the <code>all</code> parameter is ignored. In this case, if you would like to verify a particular JWS signature object, you may specify it using the <code>sig</code> parameter. Otherwise, you may simply pass NULL to verify any of the JWS signature objects in the JWS object.</p>
+<p>If <code>jwk</code> contains an array of JWKs or a JWKSet, the <code>all</code> parameter determines whether a valid signature is required for every JWK in order to successfully validate the JWS. For example, if you set <code>all</code> to false this function will succeed if a valid signature is found for any of the provided JWKs. When using this multiple JWK signature mode, the <code>sig</code> parameter must contain one of the following values:</p>
+<ol type="1">
+<li>A single JWS signature object to validate against all/any of the provided JWKs.</li>
+<li>An array of JWS signature objects. In this case, each JWS signature object will be mapped to its corresponding JWK from <code>jwk</code>. If the arrays in <code>sig</code> and <code>jwk</code> are a different size, an error will occur.</li>
+<li>NULL. This has the same effect as passing NULL for each separate key.</li>
+</ol>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
+    <tr><td class="paramname">sig</td><td>The JWS signature object(s) to verify or NULL. </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for verifying signatures. </td></tr>
+    <tr><td class="paramname">all</td><td>Whether or not to require validation of all JWKs. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>On success, true. Otherwise, false. </dd></dl>
+
+</div>
+</div>
+<a id="ga35a5d3c37101fc127933f3c856b46cc8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga35a5d3c37101fc127933f3c856b46cc8">&#9670;&nbsp;</a></span>jose_jws_ver_io()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structjose__io__t.html">jose_io_t</a>* jose_jws_ver_io </td>
+          <td>(</td>
+          <td class="paramtype">jose_cfg_t *&#160;</td>
+          <td class="paramname"><em>cfg</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jws</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>sig</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const json_t *&#160;</td>
+          <td class="paramname"><em>jwk</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>all</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Verifies signatures of one or more JWKs in a JWS object using streaming. </p>
+<p>This function behaves substantially like <a class="el" href="group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7" title="Verifies signatures of one or more JWKs in a JWS object. ">jose_jws_ver()</a> except:</p>
+<p>The payload is not specified in the JWS (<code>jws</code>). Rather, the payload is provided using the returned IO object. The input to the returned IO object will not be internally Base64 encoded. So you may need to prepend the IO chain with the result of <a class="el" href="group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff" title="Creates a new IO object which performs URL-safe Base64 encoding. ">jose_b64_enc_io()</a> (depending on your situation).</p>
+<p>Final signature verification is delayed until <a class="el" href="structjose__io__t.html#a76d1eac0d05d3604c16686b08bd80aa0">jose_io_t::done()</a> returns.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cfg</td><td>The configuration context (optional). </td></tr>
+    <tr><td class="paramname">jws</td><td>The JWS object. </td></tr>
+    <tr><td class="paramname">sig</td><td>The JWS signature object(s) to verify or NULL. </td></tr>
+    <tr><td class="paramname">jwk</td><td>The JWK(s) or JWKSet used for verifying signatures. </td></tr>
+    <tr><td class="paramname">all</td><td>Whether or not to require validation of all JWKs. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The new IO object or NULL on error. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

+ 85 - 0
doc/doxygen/html/index.html

@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: José API Documentation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">José API Documentation </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><dl class="section author"><dt>Author</dt><dd>Nathaniel McCallum </dd></dl>
+<dl class="section copyright"><dt>Copyright</dt><dd>Apache License, Version 2.0</dd></dl>
+<p>José is a C-language implementation of the Javascript Object Signing and Encryption standards. Specifically, José aims towards implementing the following standards:</p>
+<ul>
+<li>RFC 7515 - JSON Web Signature (JWS)</li>
+<li>RFC 7516 - JSON Web Encryption (JWE)</li>
+<li>RFC 7517 - JSON Web Key (JWK)</li>
+<li>RFC 7518 - JSON Web Algorithms (JWA)</li>
+<li>RFC 7519 - JSON Web Token (JWT)</li>
+<li>RFC 7520 - Examples of Protecting Content Using JOSE</li>
+<li>RFC 7638 - JSON Web Key (JWK) Thumbprint </li>
+</ul>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

File diff suppressed because it is too large
+ 86 - 0
doc/doxygen/html/io_8h_source.html


File diff suppressed because it is too large
+ 77 - 0
doc/doxygen/html/jose_8h_source.html


File diff suppressed because it is too large
+ 87 - 0
doc/doxygen/html/jquery.js


File diff suppressed because it is too large
+ 89 - 0
doc/doxygen/html/jwe_8h_source.html


File diff suppressed because it is too large
+ 83 - 0
doc/doxygen/html/jwk_8h_source.html


File diff suppressed because it is too large
+ 83 - 0
doc/doxygen/html/jws_8h_source.html


File diff suppressed because it is too large
+ 77 - 0
doc/doxygen/html/jwt_8h_source.html


File diff suppressed because it is too large
+ 26 - 0
doc/doxygen/html/menu.js


+ 9 - 0
doc/doxygen/html/menudata.js

@@ -0,0 +1,9 @@
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Modules",url:"modules.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"}]}]}]}

+ 83 - 0
doc/doxygen/html/modules.html

@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>José: Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">José
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__b64.html" target="_self">Base64</a></td><td class="desc">URL-safe Base64 Encoding &amp; Decoding </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__cfg.html" target="_self">Config</a></td><td class="desc">José Configuration </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__io.html" target="_self">IO</a></td><td class="desc">IO Chaining </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__jwe.html" target="_self">JWE</a></td><td class="desc">JSON Web Encryption (RFC 7516) </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__jwk.html" target="_self">JWK</a></td><td class="desc">JSON Web Keys (RFC 7517) </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group__jose__jws.html" target="_self">JWS</a></td><td class="desc">JSON Web Signature (RFC 7515) </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.13
+</small></address>
+</body>
+</html>

BIN
doc/doxygen/html/nav_f.png


BIN
doc/doxygen/html/nav_g.png


BIN
doc/doxygen/html/nav_h.png


BIN
doc/doxygen/html/open.png


File diff suppressed because it is too large
+ 77 - 0
doc/doxygen/html/openssl_8h_source.html


+ 26 - 0
doc/doxygen/html/search/all_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/all_0.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['base64',['Base64',['../group__jose__b64.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/all_1.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/all_1.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['config',['Config',['../group__jose__cfg.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/all_2.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/all_2.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['done',['done',['../structjose__io__t.html#a76d1eac0d05d3604c16686b08bd80aa0',1,'jose_io_t']]]
+];

+ 26 - 0
doc/doxygen/html/search/all_3.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/all_3.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['feed',['feed',['../structjose__io__t.html#afa8ec8ac8802fd2600466b9477730cfe',1,'jose_io_t']]]
+];

+ 26 - 0
doc/doxygen/html/search/all_4.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/all_4.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['io',['IO',['../group__jose__io.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/all_5.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 53 - 0
doc/doxygen/html/search/all_5.js

@@ -0,0 +1,53 @@
+var searchData=
+[
+  ['josé_20api_20documentation',['José API Documentation',['../index.html',1,'']]],
+  ['jose_5fb64_5fdec',['jose_b64_dec',['../group__jose__b64.html#gaf86ee58b51e590f9dac0bb29ee5800ff',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fbuf',['jose_b64_dec_buf',['../group__jose__b64.html#ga75953a3138781b2ad2809395587b1f44',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fio',['jose_b64_dec_io',['../group__jose__b64.html#ga8e16b78e3713aacb5bdcdc16730a3a98',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fload',['jose_b64_dec_load',['../group__jose__b64.html#ga1fa229e6903d5cc41403a2b137fcff18',1,'b64.h']]],
+  ['jose_5fb64_5fenc',['jose_b64_enc',['../group__jose__b64.html#gab8e19831335f6990bfea85d21b946e72',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fbuf',['jose_b64_enc_buf',['../group__jose__b64.html#ga2a35d8159cc76af42482df6db36543b0',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fdump',['jose_b64_enc_dump',['../group__jose__b64.html#ga244aaa61d745e3eb3dfa5fb4a204fa68',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fio',['jose_b64_enc_io',['../group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff',1,'b64.h']]],
+  ['jose_5fcfg',['jose_cfg',['../group__jose__cfg.html#ga6d89919bf7dd7969cefdb113c49a61e6',1,'cfg.h']]],
+  ['jose_5fcfg_5fauto_5ft',['jose_cfg_auto_t',['../group__jose__cfg.html#gaf1dca939bc91e5f203f440307240b08f',1,'cfg.h']]],
+  ['jose_5fcfg_5fdecref',['jose_cfg_decref',['../group__jose__cfg.html#ga30ea7bdd659e6f8620f3d4d72ed2f87a',1,'cfg.h']]],
+  ['jose_5fcfg_5ferr',['jose_cfg_err',['../group__jose__cfg.html#ga8193855cf711805afc0bbcfe03b9faf4',1,'cfg.h']]],
+  ['jose_5fcfg_5fget_5ferr_5fmisc',['jose_cfg_get_err_misc',['../group__jose__cfg.html#ga92220346ca7051fd44685b71dbc5ce3c',1,'cfg.h']]],
+  ['jose_5fcfg_5fincref',['jose_cfg_incref',['../group__jose__cfg.html#ga1c0caea470553360b15b312a123c7ce4',1,'cfg.h']]],
+  ['jose_5fcfg_5fset_5ferr_5ffunc',['jose_cfg_set_err_func',['../group__jose__cfg.html#ga2383b689e066b463b0e62b6f9853295f',1,'cfg.h']]],
+  ['jose_5fio_5fauto_5ft',['jose_io_auto_t',['../group__jose__io.html#ga5470c8ebb2993293197844f2782616b5',1,'io.h']]],
+  ['jose_5fio_5fbuffer',['jose_io_buffer',['../group__jose__io.html#gaf9372e0f4d1c3d6ece6c38f31ea7c48c',1,'io.h']]],
+  ['jose_5fio_5fdecref',['jose_io_decref',['../group__jose__io.html#ga399c2d4e43b0def36e831cc12a50877e',1,'io.h']]],
+  ['jose_5fio_5ffile',['jose_io_file',['../group__jose__io.html#gaa249153384969267f4d3f8d9691e2bef',1,'io.h']]],
+  ['jose_5fio_5fincref',['jose_io_incref',['../group__jose__io.html#ga7fbb0f97c47943576a424a0351df2413',1,'io.h']]],
+  ['jose_5fio_5fmalloc',['jose_io_malloc',['../group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f',1,'io.h']]],
+  ['jose_5fio_5fmalloc_5fsteal',['jose_io_malloc_steal',['../group__jose__io.html#ga4912707bb8e60870c661fb14e837bb69',1,'io.h']]],
+  ['jose_5fio_5fmultiplex',['jose_io_multiplex',['../group__jose__io.html#ga6ea7adf304754afee8b6ec33597991f7',1,'io.h']]],
+  ['jose_5fio_5ft',['jose_io_t',['../structjose__io__t.html',1,'']]],
+  ['jwe',['JWE',['../group__jose__jwe.html',1,'']]],
+  ['jose_5fjwe_5fdec',['jose_jwe_dec',['../group__jose__jwe.html#gac873b95e6fad75e2d517970a94346c5d',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fcek',['jose_jwe_dec_cek',['../group__jose__jwe.html#ga64b1b6074f8643aa301007fc125aed59',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fcek_5fio',['jose_jwe_dec_cek_io',['../group__jose__jwe.html#gaf22bbcd02627f938be28fa4b1778e29c',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fio',['jose_jwe_dec_io',['../group__jose__jwe.html#gacd3c7703b57c524bc2683f2c0d0db4b8',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fjwk',['jose_jwe_dec_jwk',['../group__jose__jwe.html#gab9608cf23da17fadce6078aa2d862608',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc',['jose_jwe_enc',['../group__jose__jwe.html#ga67fd2b695bfff58a3b7adaf6bce9a773',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fcek',['jose_jwe_enc_cek',['../group__jose__jwe.html#ga885caaa8a0f24bcbdf283478b26b614d',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fcek_5fio',['jose_jwe_enc_cek_io',['../group__jose__jwe.html#gae484a56237a35f5c18038a1b24952f0a',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fio',['jose_jwe_enc_io',['../group__jose__jwe.html#ga27e44e2144dc81b778158163661b7f9f',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fjwk',['jose_jwe_enc_jwk',['../group__jose__jwe.html#ga6cebc627dea8bb944d35acb776abe769',1,'jwe.h']]],
+  ['jose_5fjwe_5fhdr',['jose_jwe_hdr',['../group__jose__jwe.html#ga5920b450d6f4b0aa1729a7230a48fb32',1,'jwe.h']]],
+  ['jwk',['JWK',['../group__jose__jwk.html',1,'']]],
+  ['jose_5fjwk_5fexc',['jose_jwk_exc',['../group__jose__jwk.html#ga9977a603c39b1b7c545f3f0c3dd0a7ef',1,'jwk.h']]],
+  ['jose_5fjwk_5fgen',['jose_jwk_gen',['../group__jose__jwk.html#gac4daef7aeb077caaa459f07af353e9a8',1,'jwk.h']]],
+  ['jose_5fjwk_5fprm',['jose_jwk_prm',['../group__jose__jwk.html#gaa2023d0376c2e5ca14c2177f80f8ecd5',1,'jwk.h']]],
+  ['jose_5fjwk_5fpub',['jose_jwk_pub',['../group__jose__jwk.html#ga3ebb220fa6f93ad00c6589400c1a441c',1,'jwk.h']]],
+  ['jose_5fjwk_5fthp',['jose_jwk_thp',['../group__jose__jwk.html#ga4f5d2e9dc5f9e24646808b502b87b764',1,'jwk.h']]],
+  ['jose_5fjwk_5fthp_5fbuf',['jose_jwk_thp_buf',['../group__jose__jwk.html#ga03f820f8de4e63ffe2feb3490236040e',1,'jwk.h']]],
+  ['jws',['JWS',['../group__jose__jws.html',1,'']]],
+  ['jose_5fjws_5fhdr',['jose_jws_hdr',['../group__jose__jws.html#ga25b7bfa0fc1293dbe349d2870479f80a',1,'jws.h']]],
+  ['jose_5fjws_5fsig',['jose_jws_sig',['../group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350',1,'jws.h']]],
+  ['jose_5fjws_5fsig_5fio',['jose_jws_sig_io',['../group__jose__jws.html#ga73152ceaf852dd2d897154fb250a7860',1,'jws.h']]],
+  ['jose_5fjws_5fver',['jose_jws_ver',['../group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7',1,'jws.h']]],
+  ['jose_5fjws_5fver_5fio',['jose_jws_ver_io',['../group__jose__jws.html#ga35a5d3c37101fc127933f3c856b46cc8',1,'jws.h']]]
+];

+ 26 - 0
doc/doxygen/html/search/classes_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/classes_0.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['jose_5fio_5ft',['jose_io_t',['../structjose__io__t.html',1,'']]]
+];

BIN
doc/doxygen/html/search/close.png


+ 26 - 0
doc/doxygen/html/search/functions_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 46 - 0
doc/doxygen/html/search/functions_0.js

@@ -0,0 +1,46 @@
+var searchData=
+[
+  ['jose_5fb64_5fdec',['jose_b64_dec',['../group__jose__b64.html#gaf86ee58b51e590f9dac0bb29ee5800ff',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fbuf',['jose_b64_dec_buf',['../group__jose__b64.html#ga75953a3138781b2ad2809395587b1f44',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fio',['jose_b64_dec_io',['../group__jose__b64.html#ga8e16b78e3713aacb5bdcdc16730a3a98',1,'b64.h']]],
+  ['jose_5fb64_5fdec_5fload',['jose_b64_dec_load',['../group__jose__b64.html#ga1fa229e6903d5cc41403a2b137fcff18',1,'b64.h']]],
+  ['jose_5fb64_5fenc',['jose_b64_enc',['../group__jose__b64.html#gab8e19831335f6990bfea85d21b946e72',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fbuf',['jose_b64_enc_buf',['../group__jose__b64.html#ga2a35d8159cc76af42482df6db36543b0',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fdump',['jose_b64_enc_dump',['../group__jose__b64.html#ga244aaa61d745e3eb3dfa5fb4a204fa68',1,'b64.h']]],
+  ['jose_5fb64_5fenc_5fio',['jose_b64_enc_io',['../group__jose__b64.html#gad72c180de43c9da3456bdb0d166092ff',1,'b64.h']]],
+  ['jose_5fcfg',['jose_cfg',['../group__jose__cfg.html#ga6d89919bf7dd7969cefdb113c49a61e6',1,'cfg.h']]],
+  ['jose_5fcfg_5fdecref',['jose_cfg_decref',['../group__jose__cfg.html#ga30ea7bdd659e6f8620f3d4d72ed2f87a',1,'cfg.h']]],
+  ['jose_5fcfg_5ferr',['jose_cfg_err',['../group__jose__cfg.html#ga8193855cf711805afc0bbcfe03b9faf4',1,'cfg.h']]],
+  ['jose_5fcfg_5fget_5ferr_5fmisc',['jose_cfg_get_err_misc',['../group__jose__cfg.html#ga92220346ca7051fd44685b71dbc5ce3c',1,'cfg.h']]],
+  ['jose_5fcfg_5fincref',['jose_cfg_incref',['../group__jose__cfg.html#ga1c0caea470553360b15b312a123c7ce4',1,'cfg.h']]],
+  ['jose_5fcfg_5fset_5ferr_5ffunc',['jose_cfg_set_err_func',['../group__jose__cfg.html#ga2383b689e066b463b0e62b6f9853295f',1,'cfg.h']]],
+  ['jose_5fio_5fbuffer',['jose_io_buffer',['../group__jose__io.html#gaf9372e0f4d1c3d6ece6c38f31ea7c48c',1,'io.h']]],
+  ['jose_5fio_5fdecref',['jose_io_decref',['../group__jose__io.html#ga399c2d4e43b0def36e831cc12a50877e',1,'io.h']]],
+  ['jose_5fio_5ffile',['jose_io_file',['../group__jose__io.html#gaa249153384969267f4d3f8d9691e2bef',1,'io.h']]],
+  ['jose_5fio_5fincref',['jose_io_incref',['../group__jose__io.html#ga7fbb0f97c47943576a424a0351df2413',1,'io.h']]],
+  ['jose_5fio_5fmalloc',['jose_io_malloc',['../group__jose__io.html#gaa3f3eb70079093e1244ffe516fd1627f',1,'io.h']]],
+  ['jose_5fio_5fmalloc_5fsteal',['jose_io_malloc_steal',['../group__jose__io.html#ga4912707bb8e60870c661fb14e837bb69',1,'io.h']]],
+  ['jose_5fio_5fmultiplex',['jose_io_multiplex',['../group__jose__io.html#ga6ea7adf304754afee8b6ec33597991f7',1,'io.h']]],
+  ['jose_5fjwe_5fdec',['jose_jwe_dec',['../group__jose__jwe.html#gac873b95e6fad75e2d517970a94346c5d',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fcek',['jose_jwe_dec_cek',['../group__jose__jwe.html#ga64b1b6074f8643aa301007fc125aed59',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fcek_5fio',['jose_jwe_dec_cek_io',['../group__jose__jwe.html#gaf22bbcd02627f938be28fa4b1778e29c',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fio',['jose_jwe_dec_io',['../group__jose__jwe.html#gacd3c7703b57c524bc2683f2c0d0db4b8',1,'jwe.h']]],
+  ['jose_5fjwe_5fdec_5fjwk',['jose_jwe_dec_jwk',['../group__jose__jwe.html#gab9608cf23da17fadce6078aa2d862608',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc',['jose_jwe_enc',['../group__jose__jwe.html#ga67fd2b695bfff58a3b7adaf6bce9a773',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fcek',['jose_jwe_enc_cek',['../group__jose__jwe.html#ga885caaa8a0f24bcbdf283478b26b614d',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fcek_5fio',['jose_jwe_enc_cek_io',['../group__jose__jwe.html#gae484a56237a35f5c18038a1b24952f0a',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fio',['jose_jwe_enc_io',['../group__jose__jwe.html#ga27e44e2144dc81b778158163661b7f9f',1,'jwe.h']]],
+  ['jose_5fjwe_5fenc_5fjwk',['jose_jwe_enc_jwk',['../group__jose__jwe.html#ga6cebc627dea8bb944d35acb776abe769',1,'jwe.h']]],
+  ['jose_5fjwe_5fhdr',['jose_jwe_hdr',['../group__jose__jwe.html#ga5920b450d6f4b0aa1729a7230a48fb32',1,'jwe.h']]],
+  ['jose_5fjwk_5fexc',['jose_jwk_exc',['../group__jose__jwk.html#ga9977a603c39b1b7c545f3f0c3dd0a7ef',1,'jwk.h']]],
+  ['jose_5fjwk_5fgen',['jose_jwk_gen',['../group__jose__jwk.html#gac4daef7aeb077caaa459f07af353e9a8',1,'jwk.h']]],
+  ['jose_5fjwk_5fprm',['jose_jwk_prm',['../group__jose__jwk.html#gaa2023d0376c2e5ca14c2177f80f8ecd5',1,'jwk.h']]],
+  ['jose_5fjwk_5fpub',['jose_jwk_pub',['../group__jose__jwk.html#ga3ebb220fa6f93ad00c6589400c1a441c',1,'jwk.h']]],
+  ['jose_5fjwk_5fthp',['jose_jwk_thp',['../group__jose__jwk.html#ga4f5d2e9dc5f9e24646808b502b87b764',1,'jwk.h']]],
+  ['jose_5fjwk_5fthp_5fbuf',['jose_jwk_thp_buf',['../group__jose__jwk.html#ga03f820f8de4e63ffe2feb3490236040e',1,'jwk.h']]],
+  ['jose_5fjws_5fhdr',['jose_jws_hdr',['../group__jose__jws.html#ga25b7bfa0fc1293dbe349d2870479f80a',1,'jws.h']]],
+  ['jose_5fjws_5fsig',['jose_jws_sig',['../group__jose__jws.html#ga562d39b9b1d0ba321f9246e4d4c3b350',1,'jws.h']]],
+  ['jose_5fjws_5fsig_5fio',['jose_jws_sig_io',['../group__jose__jws.html#ga73152ceaf852dd2d897154fb250a7860',1,'jws.h']]],
+  ['jose_5fjws_5fver',['jose_jws_ver',['../group__jose__jws.html#ga89a18c4b4d7cd0f9d42224ef5698abe7',1,'jws.h']]],
+  ['jose_5fjws_5fver_5fio',['jose_jws_ver_io',['../group__jose__jws.html#ga35a5d3c37101fc127933f3c856b46cc8',1,'jws.h']]]
+];

+ 26 - 0
doc/doxygen/html/search/groups_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/groups_0.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['base64',['Base64',['../group__jose__b64.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/groups_1.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/groups_1.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['config',['Config',['../group__jose__cfg.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/groups_2.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/groups_2.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['io',['IO',['../group__jose__io.html',1,'']]]
+];

+ 26 - 0
doc/doxygen/html/search/groups_3.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 6 - 0
doc/doxygen/html/search/groups_3.js

@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['jwe',['JWE',['../group__jose__jwe.html',1,'']]],
+  ['jwk',['JWK',['../group__jose__jwk.html',1,'']]],
+  ['jws',['JWS',['../group__jose__jws.html',1,'']]]
+];

BIN
doc/doxygen/html/search/mag_sel.png


+ 12 - 0
doc/doxygen/html/search/nomatches.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>

+ 26 - 0
doc/doxygen/html/search/pages_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 4 - 0
doc/doxygen/html/search/pages_0.js

@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['josé_20api_20documentation',['José API Documentation',['../index.html',1,'']]]
+];

+ 271 - 0
doc/doxygen/html/search/search.css

@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    float: none;
+    margin-top: 8px;
+    right: 0px;
+    width: 170px;
+    height: 24px;
+    z-index: 102;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:115px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+    -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:8px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #90A5CE;
+    background-color: #F9FAFC;
+    z-index: 10001;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #3D578C;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #EEF1F7;
+    z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #425E97;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #425E97; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+    background-color: #F0F3F8;
+}
+
+.pages b {
+   color: white;
+   padding: 5px 5px 3px 5px;
+   background-image: url("../tab_a.png");
+   background-repeat: repeat-x;
+   text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+    line-height: 17px;
+    margin-left: 4px;
+    text-decoration: none;
+}
+
+.hl {
+    font-weight: bold;
+}
+
+#searchresults {
+    margin-bottom: 20px;
+}
+
+.searchpages {
+    margin-top: 10px;
+}
+

+ 791 - 0
doc/doxygen/html/search/search.js

@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+    {
+      result+=c;
+    }
+    else if (cn<16)
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout)
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow();
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else if (window.frames.MSearchResults.searchResults)
+      {
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+        if (elem) elem.focus();
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow();
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var idxChar = searchValue.substr(0, 1).toLowerCase();
+    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+    {
+      idxChar = searchValue.substr(0, 2);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+    if (idx!=-1)
+    {
+       var hexCode=idx.toString(16);
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to
+  // their default values if necessary.
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block'
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {
+        searchField.value = '';
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {
+           element = element.firstChild;
+        }
+        else if (element.nextSibling)
+        {
+           element = element.nextSibling;
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {
+            element = element.nextSibling;
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length &&
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown")
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          {
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        }
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
+function init_search()
+{
+  var results = document.getElementById("MSearchSelectWindow");
+  for (var key in indexSectionLabels)
+  {
+    var link = document.createElement('a');
+    link.setAttribute('class','SelectItem');
+    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+    link.href='javascript:void(0)';
+    link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+    results.appendChild(link);
+  }
+  searchBox.OnSelectItem(0);
+}
+

BIN
doc/doxygen/html/search/search_l.png


BIN
doc/doxygen/html/search/search_m.png


BIN
doc/doxygen/html/search/search_r.png


+ 33 - 0
doc/doxygen/html/search/searchdata.js

@@ -0,0 +1,33 @@
+var indexSectionsWithContent =
+{
+  0: "bcdfij",
+  1: "j",
+  2: "j",
+  3: "df",
+  4: "j",
+  5: "bcij",
+  6: "j"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "classes",
+  2: "functions",
+  3: "variables",
+  4: "typedefs",
+  5: "groups",
+  6: "pages"
+};
+
+var indexSectionLabels =
+{
+  0: "All",
+  1: "Data Structures",
+  2: "Functions",
+  3: "Variables",
+  4: "Typedefs",
+  5: "Modules",
+  6: "Pages"
+};
+

+ 26 - 0
doc/doxygen/html/search/typedefs_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 5 - 0
doc/doxygen/html/search/typedefs_0.js

@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['jose_5fcfg_5fauto_5ft',['jose_cfg_auto_t',['../group__jose__cfg.html#gaf1dca939bc91e5f203f440307240b08f',1,'cfg.h']]],
+  ['jose_5fio_5fauto_5ft',['jose_io_auto_t',['../group__jose__io.html#ga5470c8ebb2993293197844f2782616b5',1,'io.h']]]
+];

+ 26 - 0
doc/doxygen/html/search/variables_0.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

+ 0 - 0
doc/doxygen/html/search/variables_0.js


Some files were not shown because too many files changed in this diff