Coder Social home page Coder Social logo

scitokens-cpp's Introduction

SciTokens Library

pypi Downloads per month License information

This library aims to be a reference implementation of the SciTokens' JSON Web Token (JWT) token format.

SciTokens is built on top of the PyJWT and cryptography libraries. We aim to provide a safe, high-level interface for token manipulation, avoiding common pitfalls of using the underling libraries directly.

NOTE: SciTokens (the format and this library) is currently being designed; this README describes how we would like it to work, not necessarily current functionality. Particularly, we do not foresee the chained tokens described here as part of the first release's functionality. The ideas behind the separate Validator in this library is taken from libmacaroons.

Generating Tokens

Usage revolves around the SciToken object. This can be generated directly:

>>> import scitokens
>>> token = scitokens.SciToken() # Create token and generate a new private key
>>> token2 = scitokens.SciToken(key=private_key) # Create token using existing key

where key is a private key object (more later on generating private keys). Direct generation using a private key will most often be done to do a base token. SciTokens can be chained, meaning one token can be appended to another:

>>> token = scitokens.SciToken(parent=parent_token)

The generated object, token, will default to having all the authoriations of the parent token - but is mutable and can add further restrictions.

Tokens contain zero or more claims, which are facts about the token that typically indicate some sort of authorization the bearer of the token has. A token has a list of key-value pairs; each token can only have a single value per key, but multiple values per key can occur in a token chain.

To set a claim, one can use dictionary-like setter:

>>> token['claim1'] = 'value2'

The value of each claim should be a Python object that can be serialized to JSON.

Token Serialization

Parent tokens are typically generated by a separate server and sent as a response to a successful authentication or authorization request. SciTokens are built on top of JSON Web Tokens (JWT), which define a useful base64-encoded serialization format. A serialized token may look something like this:

eyJhbGciOiJFUzI1NiIsImN3ayI6eyJ5IjoiazRlM1FFeDVjdGJsWmNrVkhINlkzSFZoTzFadUxVVWNZQW5ON0xkREV3YyIsIngiOiI4TkU2ZEE2T1g4NHBybHZEaDZUX3kwcWJOYmc5a2xWc2pYQnJnSkw5aElBIiwiY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyJ9LCJ0eXAiOiJKV1QiLCJ4NXUiOiJodHRwczovL3ZvLmV4YW1wbGUuY29tL0pXUyJ9.eyJyZWFkIjoiL2xpZ28ifQ.uXVzbcOBCK4S4W89HzlWNmnE9ZcpuRHKTrTXYv8LZL9cDy3Injf97xNPm756fKcYwBO5KykYngFrUSGa4owglA.eyJjcnYiOiAiUC0yNTYiLCAia3R5IjogIkVDIiwgImQiOiAieWVUTTdsVXk5bGJEX2hnLVVjaGp0aXZFWHZxSWxoelJQVEVaZDBaNFBpOCJ9

This is actually 4 separate base64-encoded strings, separated by the . character. The four pieces are:

  • A header, implementing the JSON Web Key standard, specifying the cryptographic properties of the token.
  • A payload, specifying the claims (key-value pairs) encoded by the token and asserted by the VO.
  • A signature of the header and payload, ensuring authenticity of the payload.
  • A key, utilized to sign any derived tokens. The key is an optional part of the token format, but may be required by some remote services.

Given a serialized token, the scitokens library can deserialize it:

>>> token = scitokens.SciToken.deserialize(token_serialized_bytes)

As part of the deserialization, the scitokens library will throw an exception if token verification failed.

The existing token can be serialized with the serialize method:

>>> token_serialized_bytes = token.serialize()

Validating Tokens

In SciTokens, we try to distinguish between validating and verifying tokens. Here, verification refers to determining the integrity and authenticity of the token: can we validate the token came from a known source without tampering? Can we validate the chain of trust? Validation is determining whether the claims of the token are satisfied in a given context.

For example, if a token contains the claims {vo: ligo, op: read, path: /ligo}, we would first verify that the token is correctly signed by a known public key associated with LIGO. When presented to a storage system along with an HTTP request, the storage system would validate the token authorizes the corresponding request (is it a GET request? Is it for a sub-path of /ligo?).

Within the scitokens module, validation is done by the Validator object:

>>> val = scitokens.Validator()

This object can be reused for multiple validations. All SciToken claims must be validated. There are no "optional" claim attributes or values.

To validate a specific claim, provide a callback function to the Validator object:

>>> def validate_op(value):
...     return value == True
>>> val.add_validator("op", validate_op)

Once all the known validator callbacks have been registered, use the validate method with a token:

>>> val.validate(token)

This will throw a ValidationException if the token could not be validated.

Enforcing SciTokens Logic

For most users of SciTokens, determining that a token is valid is insufficient. Rather, most will be asking "does this token allow the current resource request?" The valid token must be compared to some action the user is attempting to take.

To assist in the authorization enforcement, the SciTokens library provides the Enforcer class.

An unique Enforcer object is needed for each thread and issuer:

>>> enf = scitokens.Enforcer("https://scitokens.org/dteam")

This object will accept tokens targetted to any audience; a more typical use case will look like the following:

>>> enf = scitokens.Enforcer("https://scitokens.org/dteam",
                             audience="https://example.com")

This second enforcer would not accept tokens that are intended for https://google.com.

The enforcer can then test authorization logic against a valid token:

>>> token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtp..."
>>> stoken = scitokens.SciToken.deserialize(token)
>>> enf.generate_acls(stoken)
[(u'write', u'/store/user/bbockelm'), (u'read', u'/store')]
>>> enf.test(stoken, "read", "/store/foo")
True
>>> enf.test(stoken, "write", "/store/foo")
False
>>> enf.test(stoken, "write", "/store/user/foo")
False
>>> enf.test(stoken, "write", "/store/user/bbockelm/foo")
True

The test method uses the SciTokens built-in path parsing to validate the authorization. The generate_acls method allows the caller to cache the ACL information from the token.

Creating Sample Tokens

Typically, an access token is generated during an OAuth2 workflow to facilitate authentication and authorization. However, for testing and experimentation purposes, the demo token generator provides users with the ability to create sample tokens with customized payload:

>>> payload = {"sub": "<email adress>", "scope": "read:/protected"}
>>> token = scitokens.utils.demo.token(payload)

The token method makes a request to the generator to create a serialized token for the specified payload. Users can also retrieve a parsed token by calling the parsed_token method, which returns a SciToken object corresponding to the token. The object contains the decoded token data, including the claims and signature.

Decorator

This protect decorator is designed to be used with a flask application. It can be used like:

@scitokens_protect.protect(audience="https://demo.scitokens.org", scope="read:/secret", issuer="https://demo.scitokens.org")
def Secret(token: SciToken):
    # ... token is now available.

The possible arguments are:

  • audience (str or list): Audience expected in the client token
  • scope (str): Scope required to access the function
  • issuer (str): The issuer to require of the client token

The protected function can optionally take an argument token, which is the parsed SciToken object.

Configuration

An optional configuration file can be provided that will alter the behavior of the SciTokens library. Configuration options include:

Key Description
log_level The log level for which to use. Options include: CRITICAL, ERROR, WARNING, INFO, DEBUG. Default: WARNING
log_file The full path to the file to log. Default: None
cache_lifetime The minimum lifetime (in seconds) of keys in the keycache. Default: 3600 seconds
cache_location The directory to store the KeyCache, used to store public keys across executions. Default: $HOME/.cache/scitokens

The configuration file is in the ini format, and will look similar to:

[scitokens]
log_level = DEBUG
cache_lifetime = 60

You may set the configuration by passing a file name to scitokens.set_config function:

>> import scitokens
>> scitokens.set_config("/etc/scitokens/scitokens.ini")

Project Status

pypi Build pipeline status Code coverage Code Quality Documentation Status

scitokens-cpp's People

Contributors

bbockelm avatar brianhlin avatar colebollig avatar djw8605 avatar drdaved avatar duncanmmacleod avatar edquist avatar ellert avatar gregthain avatar jaimefrey avatar jhiemstrawisc avatar jthiltges avatar matyasselmeci avatar olifre avatar timtheisen avatar todd-l-miller avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scitokens-cpp's Issues

Explicit failure + error message when cache is not writable

When we fail to create a cache (missing directory, for example), instead of immediately downloading an moving on, we should fail loudly.

The silent failure can allow daemons to hammer the JWKS URI repeatedly for long periods of time.

The error message in this case should be well-written -- whoever reviews the eventual PR should pay attention to whether it'd make sense to a sysadmin.

ver attribute mismatch (scitoken != scitokens)

Hi,

While doing some initial testing using version 0.5.1, I found that tokens from https://demo.scitokens.org could not be verified (using the scitokens-verify test program) with this error:

Failed to deserialize a token: token verification failed: Unknown profile version in token: scitoken:2.0

It appears that the code is expecting a version string of "scitokens:2.0" (with an "s"), but the demo.scitokens.org site and verification doc ( https://scitokens.org/technical_docs/Verification ) seem to indicate that the profile name should be "scitoken" (without an "s").

This seems to be a fairly fundamental problem, what am I missing here? Which of these profile names should I use in the tokens issued by my own OAuth2 server?

Regards,
Simon

"Failed to deserialize a token: Timeout was reached" - how to debug?

# scitokens-verify `cat /run/user/1902/bt_u1902`
Failed to deserialize a token: Timeout was reached

How to debug this? Debian Bullseye, libscitokens0 version 1.0.2

There's another machine with the same SciTokens setup that returns the correct response (same file content)

$ scitokens-verify `cat /run/user/1902/bt_u1902`
Token deserialization successful.

but I can't find the difference :/

Compatibility with Unity IAM

Not sure if this is out of scope for scitokens-cpp, but I'll collect my experiences here and leave the decision to you ;-).

I've been trying to get the scitokens-cpp library working with the Unity IAM, used e.g. by the Helmholtz AAI ( https://login.helmholtz.de/oauth2 ) and B2ACCESS ( https://b2access.eudat.eu/home/ ) .

I've hit two issues:

I think these are all issues, but I stopped at this point to ask the question: Is there interest to get compatibility with the Unity IAM, or is this regarded as out of scope for this library?
If there's interest in compatibility, I could try to continue. My proposal then would be to make nbf optional, and revive the linked PR to make find_key_id work in case kid is missing.

"Release" for version 1.1.0?

I see version 1.1.0 has been tagged and is already available in Fedora, but there is no GitHub release with artifacts yet (which is why I have missed this for example in packaging for Gentoo Linux).

Could you please also add a release on GitHub for the new version?
Many thanks in advance!

Support for native Windows?

Has any consideration been given to support for Windows?

My interest is mainly as a matter of principle (I like to support Windows if I can), but I don't have users knocking at my door asking for it. A naïve build attempt stops fairly quickly because of the use of libuuid, which isn't available on Windows.

Add Debian build in CI tests

Debian packaging was added in #38 but there's no CI test for it. That would be good especially for PRs like #58 that modify the debian packaging.

Build error using jwt-cpp 0.5.0

I get the following error attempting to build against jwt-cpp 0.5.0

In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:67:20: error: ‘jwt::builder’ is not a type
     serialize(jwt::builder &builder) {
                    ^~~~~~~
Full traceback
$ bash -ex build.sh
+ rm -rf _build
+ mkdir _build
+ cd _build
+ pwd
+ cmake .. -DCMAKE_INSTALL_PREFIX=/home/duncan/git/scitokens-cpp-fork/_build/_inst -DBUILD_UNITTESTS:BOOL=TRUE -DEXTERNAL_GTEST:BOOL=TRUE
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /home/duncan/opt/miniconda3/envs/py39/bin/x86_64-conda-linux-gnu-cc
-- Check for working C compiler: /home/duncan/opt/miniconda3/envs/py39/bin/x86_64-conda-linux-gnu-cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found CURL: /home/duncan/opt/miniconda3/envs/py39/lib/libcurl.so (found version "7.77.0")
-- Looking for uuid_generate
-- Looking for uuid_generate - not found
-- Found UUID : /home/duncan/opt/miniconda3/envs/py39/lib/libuuid.so
-- Found PkgConfig: /home/duncan/opt/miniconda3/envs/py39/bin/pkg-config (found version "0.29.2")
-- Checking for module 'libcrypto'
--   Found libcrypto, version 1.1.1k
-- Checking for module 'openssl'
--   Found openssl, version 1.1.1k
-- Checking for module 'sqlite3'
--   Found sqlite3, version 3.35.5
-- Configuring done
CMake Warning (dev) at test/CMakeLists.txt:3 (add_dependencies):
  Policy CMP0046 is not set: Error on non-existent dependency in
  add_dependencies.  Run "cmake --help-policy CMP0046" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  The dependency target "gtest" of target "scitokens-gtest" does not exist.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /home/duncan/git/scitokens-cpp-fork/_build
+ cmake --build .
Scanning dependencies of target SciTokens
[  6%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens.cpp.o
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:67:20: error: ‘jwt::builder’ is not a type
     serialize(jwt::builder &builder) {
                    ^~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘std::__cxx11::string scitokens::SciTokenKey::serialize(int&)’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:68:17: error: request for member ‘set_key_id’ in ‘builder’, which is of non-class type ‘int’
         builder.set_key_id(m_kid);
                 ^~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:69:24: error: request for member ‘sign’ in ‘builder’, which is of non-class type ‘int’
         return builder.sign(*this);
                        ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘std::__cxx11::string scitokens::SciTokenKey::sign(const string&) const’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:75:72: error: no matching function for call to
jwt::algorithm::rs256::sign(const string&)’
             return jwt::algorithm::rs256(m_public, m_private).sign(data);
                                                                        ^
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:784:16: note: candidate: ‘std::__cxx11::string jwt::algorithm::rsa::sign(const string&, std::error_code&) const’
    std::string sign(const std::string& data, std::error_code& ec) const {
                ^~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:784:16: note:   candidate expects 2 arguments, 1 provided
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:77:72: error: no matching function for call to
jwt::algorithm::es256::sign(const string&)’
             return jwt::algorithm::es256(m_public, m_private).sign(data);
                                                                        ^
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:924:16: note: candidate: ‘std::__cxx11::string jwt::algorithm::ecdsa::sign(const string&, std::error_code&) const’
    std::string sign(const std::string& data, std::error_code& ec) const {
                ^~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:924:16: note:   candidate expects 2 arguments, 1 provided
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘void scitokens::SciTokenKey::verify(const string&, const string&) const’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:90:78: error: no matching function for call to
jwt::algorithm::rs256::verify(const string&, const string&)’
             jwt::algorithm::rs256(m_public, m_private).verify(data, signature);
                                                                              ^
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:821:9: note: candidate: ‘void jwt::algorithm::rsa::verify(const string&, const string&, std::error_code&) const’
    void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
         ^~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:821:9: note:   candidate expects 3 arguments, 2 provided
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:92:78: error: no matching function for call to
jwt::algorithm::es256::verify(const string&, const string&)’
             jwt::algorithm::es256(m_public, m_private).verify(data, signature);
                                                                              ^
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:961:9: note: candidate: ‘void jwt::algorithm::ecdsa::verify(const string&, const string&, std::error_code&) const’
    void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
         ^~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:961:9: note:   candidate expects 3 arguments, 2 provided
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:94:95: error: no matching function for call to
jwt::error::signature_verification_exception::signature_verification_exception(const char [37])’
             throw jwt::signature_verification_exception("Provided algorithm is not supported.");
                                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   no known conversion for argument 1 from ‘const char [37]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:72:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note: candidate: ‘jwt::error::signature_verification_exception::signature_verification_exception()’
   struct signature_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note: candidate: ‘jwt::error::signature_verification_exception::signature_verification_exception(const jwt::error::signature_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note:   no known conversion for argument 1 from ‘const char [37]’ to ‘const jwt::error::signature_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note: candidate: ‘jwt::error::signature_verification_exception::signature_verification_exception(jwt::error::signature_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:71:10: note:   no known conversion for argument 1 from ‘const char [37]’ to ‘jwt::error::signature_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: At global scope:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:240:37: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Dp> class std::unique_ptr’
     std::unique_ptr<jwt::decoded_jwt> m_decoded;
                                     ^
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:240:37: note:   expected a type, got ‘decoded_jwt’
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:240:37: error: template argument 2 is invalid
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘std::__cxx11::string scitokens::SciToken::serialize()’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:192:22: error: missing template arguments before ‘builder’
         jwt::builder builder(jwt::create());
                      ^~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:198:9: error: ‘builder’ was not declared in this scope
         builder.set_issued_at(time);
         ^~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:198:9: note: suggested alternative:
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2380:8: note:   ‘jwt::builder’
  class builder {
        ^~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: At global scope:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:260:23: error: invalid use of template-name ‘jwt::decoded_jwt’ without an argument list
     void verify(const jwt::decoded_jwt &jwt) {
                       ^~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:260:23: note: class template argument deduction is only available with -std=c++17 or -std=gnu++17
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2261:8: note: ‘template<class json_traits> class jwt::decoded_jwt’ declared here
  class decoded_jwt : public header<json_traits>, public payload<json_traits> {
        ^~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘void scitokens::Validator::verify(const scitokens::SciToken&)’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:253:15: error: invalid use of template-name ‘jwt::decoded_jwt’ without an argument list
         const jwt::decoded_jwt *jwt_decoded = scitoken.m_decoded.get();
               ^~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:253:15: note: class template argument deduction is only available with -std=c++17 or -std=gnu++17
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2261:8: note: ‘template<class json_traits> class jwt::decoded_jwt’ declared here
  class decoded_jwt : public header<json_traits>, public payload<json_traits> {
        ^~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:254:14: error: ‘jwt_decoded’ was not declared in this scope
         if (!jwt_decoded) {
              ^~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:255:93: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [39])’
             throw jwt::token_verification_exception("Token is not deserialized from string.");
                                                                                             ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [39]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [39]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [39]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:257:17: error: ‘jwt_decoded’ was not declared in this scope
         verify(*jwt_decoded);
                 ^~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘void scitokens::Validator::verify(const int&)’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:261:18: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (!jwt.has_payload_claim("iat")) {
                  ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:262:79: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [25])’
             throw jwt::token_verification_exception("'iat' claim is mandatory");
                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:264:18: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (!jwt.has_payload_claim("nbf")) {
                  ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:265:79: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [25])’
             throw jwt::token_verification_exception("'nbf' claim is mandatory");
                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:267:18: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (!jwt.has_payload_claim("exp")) {
                  ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:268:79: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [25])’
             throw jwt::token_verification_exception("'exp' claim is mandatory");
                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:270:18: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (!jwt.has_payload_claim("iss")) {
                  ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:271:79: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [25])’
             throw jwt::token_verification_exception("'iss' claim is mandatory");
                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:273:18: error: request for member ‘has_header_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (!jwt.has_header_claim("kid")) {
                  ^~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:274:79: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [25])’
             throw jwt::token_verification_exception("'kid' claim is mandatory");
                                                                               ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [25]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:277:38: error: request for member ‘get_issuer’ in ‘jwt’, which is of non-class type ‘const int’
             std::string issuer = jwt.get_issuer();
                                      ^~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:286:106: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [48])’
                 throw jwt::token_verification_exception("Token issuer is not in list of allowed issuers.");
                                                                                                          ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:291:22: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
             if (!jwt.has_payload_claim(claim)) {
                      ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:294:65: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                 throw jwt::token_verification_exception(ss.str());
                                                                 ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:300:32: error: request for member ‘get_issuer’ in ‘jwt’, which is of non-class type ‘const int’
         get_public_key_pem(jwt.get_issuer(), jwt.get_key_id(), public_pem, algorithm);
                                ^~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:300:50: error: request for member ‘get_key_id’ in ‘jwt’, which is of non-class type ‘const int’
         get_public_key_pem(jwt.get_issuer(), jwt.get_key_id(), public_pem, algorithm);
                                                  ^~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:302:29: error: request for member ‘get_key_id’ in ‘jwt’, which is of non-class type ‘const int’
         SciTokenKey key(jwt.get_key_id(), algorithm, public_pem, "");
                             ^~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:306:28: error: no matching function for call to ‘jwt::verifier<jwt::default_clock, jwt::picojson_traits>::verify(const int&)’
         verifier.verify(jwt);
                            ^
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2746:8: note: candidate: ‘void jwt::verifier<Clock, json_traits>::verify(const jwt::decoded_jwt<json_traits>&) const [with Clock = jwt::default_clock; json_traits = jwt::picojson_traits]’
   void verify(const decoded_jwt<json_traits>& jwt) const {
        ^~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2746:8: note:   no known conversion for argument 1 from ‘const int’ to ‘const jwt::decoded_jwt<jwt::picojson_traits>&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2756:8: note: candidate: ‘void jwt::verifier<Clock, json_traits>::verify(const jwt::decoded_jwt<json_traits>&, std::error_code&) const [with Clock = jwt::default_clock; json_traits = jwt::picojson_traits]’
   void verify(const decoded_jwt<json_traits>& jwt, std::error_code& ec) const {
        ^~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2756:8: note:   candidate expects 2 arguments, 1 provided
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:309:17: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         if (jwt.has_payload_claim("ver")) {
                 ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:310:43: error: request for member ‘get_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
             const jwt::claim &claim = jwt.get_payload_claim("ver");
                                           ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:311:49: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
             if (claim.get_type() != jwt::claim::type::string) {
                                                 ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:312:106: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [48])’
                 throw jwt::token_verification_exception("'ver' claim value must be a string (if present)");
                                                                                                          ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:320:115: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [53])’
             throw jwt::token_verification_exception("Invalidate token type; not expecting a SciToken 2.0.");
                                                                                                           ^

In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:323:26: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
                 if (!jwt.has_payload_claim("aud")) {
                          ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:324:109: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [47])’
                   throw jwt::token_verification_exception("'aud' claim required for SciTokens 2.0 profile");
                                                                                                           ^

In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [47]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [47]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [47]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:332:115: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [53])’
             throw jwt::token_verification_exception("Invalidate token type; not expecting a SciToken 1.0.");
                                                                                                           ^

In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:338:65: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                 throw jwt::token_verification_exception(ss.str());
                                                                 ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:341:24: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
         } else if (jwt.has_payload_claim("wlcg.ver")) {
                        ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:345:107: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [49])’
                 throw jwt::token_verification_exception("Invalidate token type; not expecting a WLCG 1.0.");
                                                                                                           ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [49]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [49]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [49]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:350:43: error: request for member ‘get_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
             const jwt::claim &claim = jwt.get_payload_claim("wlcg.ver");
                                           ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:351:49: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
             if (claim.get_type() != jwt::claim::type::string) {
                                                 ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:352:106: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [48])’
                 throw jwt::token_verification_exception("'ver' claim value must be a string (if present)");
                                                                                                          ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [48]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:358:65: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                 throw jwt::token_verification_exception(ss.str());
                                                                 ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:360:22: error: request for member ‘has_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
             if (!jwt.has_payload_claim("aud")) {
                      ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:361:113: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [55])’
           throw jwt::token_verification_exception("Malformed token: 'aud' claim required for WLCG profile");
                                                                                                           ^

In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [55]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [55]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [55]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:367:111: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [53])’
             throw jwt::token_verification_exception("Invalidate token type; not expecting a SciToken 1.0.");
                                                                                                           ^

In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [53]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:374:27: error: request for member ‘get_payload_claims’ in ‘jwt’, which is of non-class type ‘const int’
         auto claims = jwt.get_payload_claims();
                           ^~~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:375:39: error: unable to deduce ‘auto&&’ from ‘claims’
         for (const auto &claim_pair : claims) {
                                       ^~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:389:70: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                      throw jwt::token_verification_exception(ss.str());
                                                                      ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:394:48: error: request for member ‘get_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
                  const jwt::claim &claim = jwt.get_payload_claim(claim_pair.first);
                                                ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:395:54: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
                  if (claim.get_type() != jwt::claim::type::string) {
                                                      ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:398:70: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                      throw jwt::token_verification_exception(ss.str());
                                                                      ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:404:73: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(char*&)’
                          throw jwt::token_verification_exception(err_msg);
                                                                         ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘char*’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘char*’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘char*’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:408:74: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                          throw jwt::token_verification_exception(ss.str());
                                                                          ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:413:48: error: request for member ‘get_payload_claim’ in ‘jwt’, which is of non-class type ‘const int’
                  const jwt::claim &claim = jwt.get_payload_claim(claim_pair.first);
                                                ^~~~~~~~~~~~~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:417:70: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(std::__cxx11::basic_stringstream<char>::__string_type)’
                      throw jwt::token_verification_exception(ss.str());
                                                                      ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘std::__cxx11::basic_stringstream<char>::__string_type’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In member function ‘scitokens::SciToken::Profile scitokens::Validator::get_profile() const’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:455:86: error: no matching function for call to ‘jwt::error::token_verification_exception::token_verification_exception(const char [32])’
             throw jwt::token_verification_exception("Token profile has not been set.");
                                                                                      ^
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:347:5: note: candidate: ‘std::system_error::system_error(std::error_code)’
     system_error(error_code __ec = error_code())
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   no known conversion for argument 1 from ‘const char [32]’ to ‘std::error_code’
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:350:5: note: candidate: ‘std::system_error::system_error(std::error_code, const string&)’
     system_error(error_code __ec, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:353:5: note: candidate: ‘std::system_error::system_error(std::error_code, const char*)’
     system_error(error_code __ec, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:356:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const char*)’
     system_error(int __v, const error_category& __ecat, const char* __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:359:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&)’
     system_error(int __v, const error_category& __ecat)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 2 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:363:5: note: candidate: ‘std::system_error::system_error(int, const std::_V2::error_category&, const string&)’
     system_error(int __v, const error_category& __ecat, const string& __what)
     ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   candidate expects 3 arguments, 1 provided
In file included from /usr/include/c++/8/bits/ios_base.h:46,
                 from /usr/include/c++/8/ios:42,
                 from /usr/include/c++/8/istream:38,
                 from /usr/include/c++/8/sstream:38,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:3,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/usr/include/c++/8/system_error:341:9: note: candidate: ‘std::system_error::system_error(const std::system_error&)’
   class system_error : public std::runtime_error
         ^~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   inherited here
    using system_error::system_error;
                        ^~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:84:24: note:   an inherited constructor is not a candidate for initialization from an expression of the same or derived type
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception()’
   struct token_verification_exception : public std::system_error {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   candidate expects 0 arguments, 1 provided
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(const jwt::error::token_verification_exception&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [32]’ to ‘const jwt::error::token_verification_exception&’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note: candidate: ‘jwt::error::token_verification_exception::token_verification_exception(jwt::error::token_verification_exception&&)’
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:83:10: note:   no known conversion for argument 1 from ‘const char [32]’ to ‘jwt::error::token_verification_exception&&’
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In static member function ‘static bool scitokens::Enforcer::str_validator(const claim&, void*)’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:540:48: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
         return claim.get_type() == jwt::claim::type::string;
                                                ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h: In static member function ‘static bool scitokens::Enforcer::aud_validator(const claim&, void*)’:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:548:45: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
         if (claim.get_type() == jwt::claim::type::string) {
                                             ^~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:551:52: error: ‘jwt::claim<jwt::picojson_traits>::type’ has not been declared
         } else if (claim.get_type() == jwt::claim::type::array) {
                                                    ^~~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h: In instantiation of ‘void jwt::verifier<Clock, json_traits>::algo<T>::verify(const string&, const string&, std::error_code&) [with T = scitokens::SciTokenKey; Clock = jwt::default_clock; json_traits = jwt::picojson_traits; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2618:9:   required from here
/home/duncan/opt/miniconda3/envs/py39/include/jwt-cpp/jwt.h:2619:5: error: no matching function for call to
scitokens::SciTokenKey::verify(const string&, const string&, std::error_code&)’
     alg.verify(data, sig, ec);
     ^~~
In file included from /home/duncan/git/scitokens-cpp-fork/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:88:5: note: candidate: ‘void scitokens::SciTokenKey::verify(const string&, const string&) const’
     verify(const std::string &data, const std::string &signature) const {
     ^~~~~~
/home/duncan/git/scitokens-cpp-fork/src/scitokens_internal.h:88:5: note:   candidate expects 2 arguments, 3 provided
make[2]: *** [CMakeFiles/SciTokens.dir/build.make:63: CMakeFiles/SciTokens.dir/src/scitokens.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:147: CMakeFiles/SciTokens.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Add option to use external gtest

Currently when -DBUILD_UNITTESTS is given, the build compiles a vendored copy of gtest on-the-fly. It would be nice to have the option to use a prebuilt external copy of gtest.

Crash in cache code on CentOS8

Hi,

When using this library via xrootd-server on CentOS8 (version 0.5.1 from EPEL or OSG repos), I get the following crash when verifying a token:

#0  0x00007fb245d0d7ff in raise () from /lib64/libc.so.6                                                                                                                                                                                                                   
#1  0x00007fb245cf7c35 in abort () from /lib64/libc.so.6                                                                                                                                      
#2  0x00007fb23fdc8b54 in std::__replacement_assert (__condition=0x7fb23fdcb130 "__builtin_expect(__n < this->size(), true)", __function=<synthetic pointer>, __line=932, __file=0x7fb23fdcb160 "/usr/include/c++/8/bits/stl_vector.h")
    at /usr/include/c++/8/x86_64-redhat-linux/bits/c++config.h:2391
#3  std::vector<char, std::allocator<char> >::operator[] (__n=0, this=<synthetic pointer>) at /usr/include/c++/8/bits/stl_vector.h:932                                                                                                                                      
#4  (anonymous namespace)::get_cache_file () at /usr/src/debug/scitokens-cpp-0.5.1-2.el8.x86_64/src/scitokens_cache.cpp:62
...

which refers to these lines of code:

std::vector<char> buf;
buf.reserve(bufsize);
std::string home_dir;
struct passwd pwd, *result = NULL;
getpwuid_r(geteuid(), &pwd, &buf[0], bufsize, &result);

I think the problem is that accessing buf[0] is technically an out-of-bounds access because the vector is empty, but on glibc it does still return the start of the internal array so generally works (although this is undefined behaviour). When the code is put through the CentOS8 RPM build system, the build system adds a number of fortification options by default, which appears to include a bounds check on the [] operator, triggering the assert crash I'm seeing.

Would it be possible to fix this? I've included a patch below that I've been using as a workaround (although I haven't tested it very thoroughly).

Regards,
Simon

+++ b/src/scitokens_cache.cpp
@@ -1,7 +1,7 @@
 
 #include <cstdint>
 #include <string>
-#include <vector>
+#include <memory>
 
 #include <pwd.h>
 #include <stdlib.h>
@@ -54,12 +54,11 @@ get_cache_file() {
     auto bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
     bufsize = (bufsize == -1) ? 16384 : bufsize;
 
-    std::vector<char> buf;
-    buf.reserve(bufsize);
+    std::unique_ptr<char[]> buf(new char[bufsize]);
 
     std::string home_dir;
     struct passwd pwd, *result = NULL;
-    getpwuid_r(geteuid(), &pwd, &buf[0], bufsize, &result);
+    getpwuid_r(geteuid(), &pwd, buf.get(), bufsize, &result);
     if (result && result->pw_dir) {
         home_dir = result->pw_dir;
         home_dir += "/.cache";

JWK cache update time: Make the 600 seconds configurable

Currently, a re-check interval of 600 seconds is hardcoded here:

auto now = std::time(NULL);
// TODO: take expiration time from the cache-control header in the response.
keys = json_obj;
next_update = now + 600;
expires = now + 4*3600;

It might be useful to have this configurable. For the WLCG IAM, I observe that curling sometimes takes exceptionally long:

curl -s https://wlcg.cloud.cnaf.infn.it/jwk > /dev/null  0,01s user 0,00s system 7% cpu 0,176 total
curl -s https://wlcg.cloud.cnaf.infn.it/jwk > /dev/null  0,01s user 0,01s system 0% cpu 3,022 total
curl -s https://wlcg.cloud.cnaf.infn.it/jwk > /dev/null  0,01s user 0,00s system 8% cpu 0,144 total

Some storage implementations time out if AuthN/Z takes ~5 seconds, so it might be useful to cache the JWK a bit longer.

Would a larger default be reasonable, e.g. a fraction of the expiration time? Or would it be better to make this configurable?

Configuration API should allow cache location management

When the scitokens library is embedded in a daemon (xrootd, condor), the daemon often will know better than the library about where to place the cache.

Let's extend the cache API to take a new key, specifying the location of the SQLite cache.

Deprecation warnings from OpenSSL 3

Conda-forge is attempting to rebuild packages against openssl v3. The scitokens-cpp build fails out-of-the-box because of a host of deprecated-declarations warnings treated as errors:

$ mamba create -q -y -n scitokens-cpp c-compiler cmake make pkg-config openssl=3 picojson libcurl libuuid sqlite=3
  Package                         Version  Build          Channel                    Size
───────────────────────────────────────────────────────────────────────────────────────────
  Install:
───────────────────────────────────────────────────────────────────────────────────────────

  + _libgcc_mutex                     0.1  conda_forge    conda-forge/linux-64     Cached
  + _openmp_mutex                     4.5  1_gnu          conda-forge/linux-64     Cached
  + binutils                       2.36.1  hdd6e379_2     conda-forge/linux-64     Cached
  + binutils_impl_linux-64         2.36.1  h193b22a_2     conda-forge/linux-64     Cached
  + binutils_linux-64                2.36  hf3e587d_1     conda-forge/linux-64     Cached
  + bzip2                           1.0.8  h7f98852_4     conda-forge/linux-64     Cached
  + c-ares                         1.18.1  h7f98852_0     conda-forge/linux-64     Cached
  + c-compiler                      1.3.0  h7f98852_0     conda-forge/linux-64     Cached
  + ca-certificates             2021.10.8  ha878542_0     conda-forge/linux-64     Cached
  + cmake                          3.21.3  h8897547_0     conda-forge/linux-64     Cached
  + expat                           2.4.1  h9c3ff4c_0     conda-forge/linux-64     Cached
  + gcc                             9.4.0  h192d537_1     conda-forge/linux-64     Cached
  + gcc_impl_linux-64               9.4.0  h03d3576_11    conda-forge/linux-64     Cached
  + gcc_linux-64                    9.4.0  h391b98a_1     conda-forge/linux-64     Cached
  + kernel-headers_linux-64        2.6.32  he073ed8_15    conda-forge/noarch       Cached
  + krb5                           1.19.2  h48eae69_3     conda-forge/linux-64     Cached
  + ld_impl_linux-64               2.36.1  hea4e1c9_2     conda-forge/linux-64     Cached
  + libcurl                        7.80.0  h494985f_0     conda-forge/linux-64     Cached
  + libedit                  3.1.20191231  he28a2e2_2     conda-forge/linux-64     Cached
  + libev                            4.33  h516909a_1     conda-forge/linux-64     Cached
  + libgcc-devel_linux-64           9.4.0  hd854feb_11    conda-forge/linux-64     Cached
  + libgcc-ng                      11.2.0  h1d223b6_11    conda-forge/linux-64     Cached
  + libgomp                        11.2.0  h1d223b6_11    conda-forge/linux-64     Cached
  + libnghttp2                     1.43.0  ha19adfc_1     conda-forge/linux-64     Cached
  + libsanitizer                    9.4.0  h79bfe98_11    conda-forge/linux-64     Cached
  + libssh2                        1.10.0  ha35d2d1_2     conda-forge/linux-64     Cached
  + libstdcxx-ng                   11.2.0  he4da1e4_11    conda-forge/linux-64     Cached
  + libuuid                        2.32.1  h7f98852_1000  conda-forge/linux-64     Cached
  + libuv                          1.42.0  h7f98852_0     conda-forge/linux-64     Cached
  + libzlib                        1.2.11  h36c2ea0_1013  conda-forge/linux-64     Cached
  + lz4-c                           1.9.3  h9c3ff4c_1     conda-forge/linux-64     Cached
  + make                              4.3  hd18ef5c_1     conda-forge/linux-64     Cached
  + ncurses                           6.2  h58526e2_4     conda-forge/linux-64     Cached
  + openssl                         3.0.0  h7f98852_2     conda-forge/linux-64     Cached
  + picojson                        1.3.0  ha770c72_0     conda-forge/linux-64     Cached
  + pkg-config                     0.29.2  h36c2ea0_1008  conda-forge/linux-64     Cached
  + readline                          8.1  h46c0cb4_0     conda-forge/linux-64     Cached
  + rhash                           1.4.1  h7f98852_0     conda-forge/linux-64     Cached
  + sqlite                         3.36.0  h9cd32fc_2     conda-forge/linux-64     Cached
  + sysroot_linux-64                 2.12  he073ed8_15    conda-forge/noarch       Cached
  + tk                             8.6.11  h27826a3_1     conda-forge/linux-64     Cached
  + xz                              5.2.5  h516909a_1     conda-forge/linux-64     Cached
  + zlib                           1.2.11  h36c2ea0_1013  conda-forge/linux-64     Cached
  + zstd                            1.5.0  ha95c52a_0     conda-forge/linux-64     Cached

  Summary:

  Install: 44 packages

  Total download: 0  B

───────────────────────────────────────────────────────────────────────────────────────────

Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done
$ cmake .
CMake Deprecation Warning at CMakeLists.txt:2 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- Found UUID : /home/duncan/opt/mambaforge/envs/scitokens-cpp/lib/libuuid.so
-- Checking for module 'sqlite3'
--   Found sqlite3, version 3.36.0
-- Configuring done
-- Generating done
-- Build files have been written to: /home/duncan/git/scitokens-cpp
$ cmake --build .
[  7%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens.cpp.o
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h: In constructor ‘jwt::algorithm::ecdsa::ecdsa(const string&, const string&, const string&, const string&, const EVP_MD* (*)(), const string&, size_t)’:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:360:110: error: ‘EC_KEY* PEM_read_bio_EC_PUBKEY(BIO*, EC_KEY**, int (*)(char*, int, int, void*), void*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 _bio_EC_PUBKEY(pubkey_bio.get(), nullptr, nullptr, (void*)public_key_password.c_str()), EC_KEY_free);
                                                                                      ^

In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:463:1: note: declared here
 DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY)
 ^~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:360:110: error: ‘EC_KEY* PEM_read_bio_EC_PUBKEY(BIO*, EC_KEY**, int (*)(char*, int, int, void*), void*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 _bio_EC_PUBKEY(pubkey_bio.get(), nullptr, nullptr, (void*)public_key_password.c_str()), EC_KEY_free);
                                                                                      ^

In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:463:1: note: declared here
 DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY)
 ^~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:360:113: error: ‘void EC_KEY_free(EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 o_EC_PUBKEY(pubkey_bio.get(), nullptr, nullptr, (void*)public_key_password.c_str()), EC_KEY_fre
);
                                                                                      ^~~~~~~~~~

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1001:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key);
                            ^~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:363:71: error: ‘const EC_GROUP* EC_KEY_get0_group(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
      size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
                                                                       ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1032:39: note: declared here
 OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
                                       ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:363:71: error: ‘const EC_GROUP* EC_KEY_get0_group(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
      size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
                                                                       ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1032:39: note: declared here
 OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
                                       ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:373:127: error: ‘EC_KEY* PEM_read_bio_ECPrivateKey(BIO*, EC_KEY**, int (*)(char*, int, int, void*), void*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (privkey_bio.get(), nullptr, nullptr, const_cast<char*>(private_key_password.c_str())), EC_KEY_free);
                                                                                      ^

In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:462:1: note: declared here
 DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY)
 ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:373:127: error: ‘EC_KEY* PEM_read_bio_ECPrivateKey(BIO*, EC_KEY**, int (*)(char*, int, int, void*), void*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (privkey_bio.get(), nullptr, nullptr, const_cast<char*>(private_key_password.c_str())), EC_KEY_free);
                                                                                      ^

In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:462:1: note: declared here
 DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY)
 ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:373:130: error: ‘void EC_KEY_free(EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 ivkey_bio.get(), nullptr, nullptr, const_cast<char*>(private_key_password.c_str())), EC_KEY_fre
);
                                                                                      ^~~~~~~~~~

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1001:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key);
                            ^~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:376:71: error: ‘const EC_GROUP* EC_KEY_get0_group(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
      size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
                                                                       ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1032:39: note: declared here
 OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
                                       ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:376:71: error: ‘const EC_GROUP* EC_KEY_get0_group(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
      size_t keysize = EC_GROUP_get_degree(EC_KEY_get0_group(pkey.get()));
                                                                       ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1032:39: note: declared here
 OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
                                       ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:383:35: error: ‘int EC_KEY_check_key(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     if(EC_KEY_check_key(pkey.get()) == 0)
                                   ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1105:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key);
                           ^~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:383:35: error: ‘int EC_KEY_check_key(const EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     if(EC_KEY_check_key(pkey.get()) == 0)
                                   ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1105:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key);
                           ^~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h: In member function ‘std::__cxx11::string jwt::algorithm::ecdsa::sign(const string&) const’:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:396:100: error: ‘ECDSA_SIG* ECDSA_do_sign(const unsigned char*, int, EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 _do_sign((const unsigned char*)hash.data(), static_cast<int>(hash.size()), pkey.get()), ECDSA_SIG_free);
                                                                                      ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1363:34: note: declared here
 OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,
                                  ^~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:396:100: error: ‘ECDSA_SIG* ECDSA_do_sign(const unsigned char*, int, EC_KEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 _do_sign((const unsigned char*)hash.data(), static_cast<int>(hash.size()), pkey.get()), ECDSA_SIG_free);
                                                                                      ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1363:34: note: declared here
 OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,
                                  ^~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h: In member function ‘void jwt::algorithm::ecdsa::verify(const string&, const string&) const’:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:440:111: error: ‘int ECDSA_do_verify(const unsigned char*, int, const ECDSA_SIG*, EC_KEY*)’ is deprecated: Since OpenSSL 3.0
-Werror=deprecated-declarations]
 y((const unsigned char*)hash.data(), static_cast<int>(hash.size()), sig.get(), pkey.get()) != 1)
                                                                                          ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1389:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
                           ^~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:440:111: error: ‘int ECDSA_do_verify(const unsigned char*, int, const ECDSA_SIG*, EC_KEY*)’ is deprecated: Since OpenSSL 3.0
-Werror=deprecated-declarations]
 y((const unsigned char*)hash.data(), static_cast<int>(hash.size()), sig.get(), pkey.get()) != 1)
                                                                                          ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:33,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/ec.h:1389:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
                           ^~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h: In member function ‘std::__cxx11::string jwt::algorithm::pss::sign(const string&) const’:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:36: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                    ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:36: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                    ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:79: error: ‘rsa_st* EVP_PKEY_get1_RSA(EVP_PKEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                               ^
In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:9,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/evp.h:1348:16: note: declared here
 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
                ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:79: error: ‘rsa_st* EVP_PKEY_get1_RSA(EVP_PKEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                               ^
In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:9,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/evp.h:1348:16: note: declared here
 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
                ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:82: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                                  ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:518:90: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                                          ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:519:40: error: ‘int RSA_size(const RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     const int size = RSA_size(key.get());
                                        ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:204:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa);
                           ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:519:40: error: ‘int RSA_size(const RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     const int size = RSA_size(key.get());
                                        ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:204:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa);
                           ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:522:132: error: ‘int RSA_padding_add_PKCS1_PSS_mgf1(RSA*, unsigned char*, const unsigned char*, const EVP_MD*, const EVP_MD*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (key.get(), (unsigned char*)padded.data(), (const unsigned char*)hash.data(), md(), md(), -1))
                                                                                             ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:438:5: note: declared here
 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:522:132: error: ‘int RSA_padding_add_PKCS1_PSS_mgf1(RSA*, unsigned char*, const unsigned char*, const EVP_MD*, const EVP_MD*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (key.get(), (unsigned char*)padded.data(), (const unsigned char*)hash.data(), md(), md(), -1))
                                                                                             ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:438:5: note: declared here
 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:526:125: error: ‘int RSA_private_encrypt(int, const unsigned char*, unsigned char*, RSA*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (const unsigned char*)padded.data(), (unsigned char*)res.data(), key.get(), RSA_NO_PADDING) < 0)
                                                                                           ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:285:5: note: declared here
 int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to,
     ^~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:526:125: error: ‘int RSA_private_encrypt(int, const unsigned char*, unsigned char*, RSA*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 (const unsigned char*)padded.data(), (unsigned char*)res.data(), key.get(), RSA_NO_PADDING) < 0)
                                                                                           ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:285:5: note: declared here
 int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to,
     ^~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h: In member function ‘void jwt::algorithm::pss::verify(const string&, const string&) const’:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:36: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                    ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:36: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                    ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:79: error: ‘rsa_st* EVP_PKEY_get1_RSA(EVP_PKEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                               ^
In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:9,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/evp.h:1348:16: note: declared here
 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
                ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:79: error: ‘rsa_st* EVP_PKEY_get1_RSA(EVP_PKEY*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                               ^
In file included from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:9,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/evp.h:1348:16: note: declared here
 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
                ^~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:82: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                                  ^~~~~~~~
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:539:90: error: ‘void RSA_free(RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     std::unique_ptr<RSA, decltype(&RSA_free)> key(EVP_PKEY_get1_RSA(pkey.get()), RSA_free);
                                                                                          ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:293:28: note: declared here
 OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
                            ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:540:40: error: ‘int RSA_size(const RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     const int size = RSA_size(key.get());
                                        ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:204:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa);
                           ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:540:40: error: ‘int RSA_size(const RSA*)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
     const int size = RSA_size(key.get());
                                        ^
In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:204:27: note: declared here
 OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa);
                           ^~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:543:157: error: ‘int RSA_public_decrypt(int, const unsigned char*, unsigned char*, RSA*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
  (const unsigned char*)signature.data(), (unsigned char*)sig.data(), key.get(), RSA_NO_PADDING))
                                                                                               ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:288:5: note: declared here
 int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to,
     ^~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:543:157: error: ‘int RSA_public_decrypt(int, const unsigned char*, unsigned char*, RSA*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
  (const unsigned char*)signature.data(), (unsigned char*)sig.data(), key.get(), RSA_NO_PADDING))
                                                                                               ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:288:5: note: declared here
 int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to,
     ^~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:546:129: error: ‘int RSA_verify_PKCS1_PSS_mgf1(RSA*, const unsigned char*, const EVP_MD*, const EVP_MD*, const unsigned char*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 key.get(), (const unsigned char*)hash.data(), md(), md(), (const unsigned char*)sig.data(), -1))
                                                                                               ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:433:5: note: declared here
 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
     ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:546:129: error: ‘int RSA_verify_PKCS1_PSS_mgf1(RSA*, const unsigned char*, const EVP_MD*, const EVP_MD*, const unsigned char*, int)’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
 key.get(), (const unsigned char*)hash.data(), md(), md(), (const unsigned char*)sig.data(), -1))
                                                                                               ^

In file included from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/x509.h:36,
                 from /home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/pem.h:23,
                 from /home/duncan/git/scitokens-cpp/vendor/jwt-cpp/include/jwt-cpp/jwt.h:11,
                 from /home/duncan/git/scitokens-cpp/src/scitokens_internal.h:6,
                 from /home/duncan/git/scitokens-cpp/src/scitokens.cpp:7:
/home/duncan/opt/mambaforge/envs/scitokens-cpp/include/openssl/rsa.h:433:5: note: declared here
 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
     ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[2]: *** [CMakeFiles/SciTokens.dir/build.make:76: CMakeFiles/SciTokens.dir/src/scitokens.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:223: CMakeFiles/SciTokens.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

Support validating tokens without an outbound network connection

Currently one cannot validate a bearer token without an outbound network connection:

$ scitokens-test-access $BEARER_TOKEN https://cilogon.org/ligo ANY read /frames
Failed to deserialize a token: Couldn't connect to server

Is this feasible? It would enable using tokens for jobs on cluster nodes that are not exposed to the network (e.g. on LIGO/Hawk in Cardiff).

Debian packaging is missing

I want to build this for cvmfs-contrib on Debian/Ubuntu, but the packaging is missing. @duncanmmacleod you have been submitting fixes for Debian; can you supply the packaging files? Having a "debian" subdirectory is the usual convention.

Add CI check for updated Debian files

It's very easy to forget to update the debian/control and debian/scitokens-cpp.dsc files when the rpm/scitokens-cpp.spec file is updated with a new release. Add a CI check to avoid that.

Related to #59.

Plain JWT support

In the #53 (comment) it was mentioned plan to support "plain JWT", but it seems to me this did not yet happened, e.g. for all profiles except WLCG JWT nbf is still mandatory

if (m_profile != SciToken::Profile::AT_JWT) {
if (!jwt.has_payload_claim("nbf")) {
throw JWTVerificationException("'nbf' claim is mandatory");
}
}

so it is impossible to use HTCondor-CE with AARC tokens

02/06/23 00:41:10 (fd:17) (pid:773571) (D_AUDIT) Examining SciToken with payload {"exp":1675643497,"iat":1675639897,"auth_time":1657493020,"jti":"67b3ec77-980d-4eb0-a193-6f9a62cdb779","iss":"https://aai.egi.eu/auth/realms/egi","sub":"[email protected]","typ":"Bearer","azp":"oidc-agent","session_state":"cbde4873-2777-46f0-b61c-05a101f9aed3","scope":"openid eduperson_unique_id offline_access eduperson_scoped_affiliation eduperson_entitlement profile email","sid":"cbde4873-2777-46f0-b61c-
05a101f9aed3","authenticating_authority":"https://cern.ch/login"}.
02/06/23 00:41:10 (fd:17) (pid:773571) (D_SECURITY) SCITOKENS:2:Failed to deserialize scitoken: token verification failed: 'nbf' claim is mandatory

Build error using jwt-cpp-0.4.0 (latest)

I'm trying to build a conda package for this, and cannot get it to build against the latest release of jwt-cpp (0.4.0). If this is an actual compatibility issue (i.e. this project needs an older version of jwt-cpp) can you please instruct me the version of jwt-cpp to use (build)?

Alternatively, it looks like this project vendors jwt-cpp at an older version in the git repo, is it possible to include that vendored copy in the tarballs to use that at build time?*

*It looks like this may be properly included in the 'release tarball' that the spec file is referencing but one of those hasn't been provided since 0.3.3.

Any help/guidance is greatly appreciated. Thanks.

Build failure:

[  7%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens.cpp.o
/usr/bin/c++ -DSciTokens_EXPORTS -I$SRC_DIR -I$PREFIX/include -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/scitokens-cpp-0.5.1 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -Wall -Werror -std=c++11 -O3 -DNDEBUG -fPIC -o CMakeFiles/SciTokens.dir/src/scitokens.cpp.o -c $SRC_DIR/src/scitokens.cpp
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h: In member function ‘std::__cxx11::string scitokens::SciToken::serialize()’:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:206:47: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::__cxx11::basic_string<char>, jwt::claim>::mapped_type’ {aka ‘jwt::claim’} and ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’})
         m_claims["jti"] = std::string(uuid_str);
                                               ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:6,
                 from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(const jwt::claim&)’
  class claim {
        ^~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(jwt::claim&&)’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::claim&&’
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:209:58: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::__cxx11::basic_string<char>, jwt::claim>::mapped_type’ {aka ‘jwt::claim’} and ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’})
             m_claims["ver"] = std::string("scitokens:2.0");
                                                          ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:6,
                 from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(const jwt::claim&)’
  class claim {
        ^~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(jwt::claim&&)’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::claim&&’
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:212:52: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::__cxx11::basic_string<char>, jwt::claim>::mapped_type’ {aka ‘jwt::claim’} and ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’})
                 m_claims["aud"] = std::string("ANY");
                                                    ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:6,
                 from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(const jwt::claim&)’
  class claim {
        ^~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(jwt::claim&&)’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::claim&&’
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:215:53: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::__cxx11::basic_string<char>, jwt::claim>::mapped_type’ {aka ‘jwt::claim’} and ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’})
             m_claims["wlcg.ver"] = std::string("1.0");
                                                     ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:6,
                 from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(const jwt::claim&)’
  class claim {
        ^~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(jwt::claim&&)’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::claim&&’
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:218:80: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::__cxx11::basic_string<char>, jwt::claim>::mapped_type’ {aka ‘jwt::claim’} and ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’})
                 m_claims["aud"] = std::string("https://wlcg.cern.ch/jwt/v1/any");
                                                                                ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:6,
                 from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(const jwt::claim&)’
  class claim {
        ^~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note: candidate: ‘jwt::claim& jwt::claim::operator=(jwt::claim&&)’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include/jwt-cpp/jwt.h:766:8: note:   no known conversion for argument 1 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘jwt::claim&&’
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp: In function ‘int scitoken_set_claim_string(SciToken, const char*, const char*, char**)’:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:59:54: error: no matching function for call to ‘scitokens::SciToken::set_claim(const char*&, std::__cxx11::string)’
         real_token->set_claim(key, std::string(value));
                                                      ^
In file included from /home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens.cpp:7:
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:127:5: note: candidate: ‘void scitokens::SciToken::set_claim(const string&, const jwt::claim&)’
     set_claim(const std::string &key, const jwt::claim &value) {
     ^~~~~~~~~
/home/duncan/opt/miniconda3/conda-bld/scitokens-cpp_1606439032710/work/src/scitokens_internal.h:127:5: note:   no known conversion for argument 2 from ‘std::__cxx11::string’ {aka ‘std::__cxx11::basic_string<char>’} to ‘const jwt::claim&’
make[2]: *** [CMakeFiles/SciTokens.dir/build.make:82: CMakeFiles/SciTokens.dir/src/scitokens.cpp.o] Error 1
make[2]: Leaving directory '$SRC_DIR/_build'
make[1]: *** [CMakeFiles/Makefile2:186: CMakeFiles/SciTokens.dir/all] Error 2
make[1]: Leaving directory '$SRC_DIR/_build'
make: *** [Makefile:149: all] Error 2

Errors while trying to build for Debian (Buster, Stretch, Jessie)

I'm using the git head of jwt-cpp to provide a Debian package, consisting of the three header files only; then I'm attempting to build scitokens-cpp from release tarball 0.3.0, in a clean sandbox while fulfilling the obvious build requirements

Build-Depends: debhelper (>= 9),                                                                                                                                                                                                                                                                                                                                           
        cmake,                                                                                                                                                                                                                                                                                                                                                             
        libsqlite3-dev,                                                                                                                                                                                                                                                                                                                                                    
        libssl-dev,                                                                                                                                                                                                                                                                                                                                                        
        libcurl4-openssl-dev | libcurl4-gnutls-dev,                                                                                                                                                                                                                                                                                                                        
        uuid-dev,                                                                                                                                                                                                                                                                                                                                                          
        jwt-cpp,                                                                                                                                                                                                                                                                                                                                                           
        pkg-config                                                                                                                                                                                                                                                                                                                                                         

I get different results, all causing the build to fail.

Buster:

[  8%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens.cpp.o                                                                                                                                                                                                                                                                                                    
/usr/bin/c++  -DSciTokens_EXPORTS -I/build/scitokens-cpp-0.3.0  -g -O2 -fdebug-prefix-map=/build/scitokens-cpp-0.3.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Werror -std=c++11 -fPIC   -o CMakeFiles/SciTokens.dir/src/scitokens.cpp.o -c /build/scitokens-cpp-0.3.0/src/scitokens.cpp                          
In file included from /build/scitokens-cpp-0.3.0/src/scitokens.cpp:7:                                                                                                                                                                                                                                                                                                      
/build/scitokens-cpp-0.3.0/src/scitokens_internal.h: In member function 'bool scitokens::Enforcer::test(const scitokens::SciToken&, const string&, const string&)':                                                                                                                                                                                                        
/build/scitokens-cpp-0.3.0/src/scitokens_internal.h:382:23: error: catching polymorphic type 'class std::runtime_error' by value [-Werror=catch-value=]                                                                                                                                                                                                                    
         } catch (std::runtime_error) {                                                                                                                                                                                                                                                                                                                                    
                       ^~~~~~~~~~~~~                                                                                                                                                                                                                                                                                                                                       
/build/scitokens-cpp-0.3.0/src/scitokens.cpp: In function 'int validator_validate(Validator, SciToken, char**)':                                                                                                                                                                                                                                                           
/build/scitokens-cpp-0.3.0/src/scitokens.cpp:219:29: error: catching polymorphic type 'class std::exception' by value [-Werror=catch-value=]                                                                                                                                                                                                                               
     } catch (std::exception exc) {                                                                                                                                                                                                                                                                                                                                        
                             ^~~                                                                                                                                                                                                                                                                                                                                           
cc1plus: all warnings being treated as errors                                                                                                                                                                                                                                                                                                                              
make[3]: *** [CMakeFiles/SciTokens.dir/build.make:66: CMakeFiles/SciTokens.dir/src/scitokens.cpp.o] Error 1                                                                                                                                                                                                                                                                

Stretch:

[ 16%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o                                                                                                                                                                                                                                                                                           
/usr/bin/c++   -DSciTokens_EXPORTS -I/build/scitokens-cpp-0.3.0  -g -O2 -fdebug-prefix-map=/build/scitokens-cpp-0.3.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Werror -std=c++11 -fPIC   -o CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o -c /build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp       
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp: In function 'std::__cxx11::string {anonymous}::rs256_from_coords(const string&, const string&)':                                                                                                                                                                                                                    
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:241:8: error: invalid use of incomplete type 'struct rsa_st'                                                                                                                                                                                                                                                         
     rsa->e = e_bignum.get();                                                                                                                                                                                                                                                                                                                                              
        ^~                                                                                                                                                                                                                                                                                                                                                                 
In file included from /usr/include/openssl/evp.h:14:0,                                                                                                                                                                                                                                                                                                                     
                 from /usr/include/jwt-cpp/jwt.h:9,                                                                                                                                                                                                                                                                                                                        
                 from /build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:7:                                                                                                                                                                                                                                                                                             
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'                                                                                                                                                                                                                                                                                       
 typedef struct rsa_st RSA;                                                                                                                                                                                                                                                                                                                                                
                ^~~~~~                                                                                                                                                                                                                                                                                                                                                     
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:242:8: error: invalid use of incomplete type 'struct rsa_st'                                                                                                                                                                                                                                                         
     rsa->n = n_bignum.get();                                                                                                                                                                                                                                                                                                                                              
        ^~                                                                                                                                                                                                                                                                                                                                                                 
In file included from /usr/include/openssl/evp.h:14:0,                                                                                                                                                                                                                                                                                                                     
                 from /usr/include/jwt-cpp/jwt.h:9,                                                                                                                                                                                                                                                                                                                        
                 from /build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:7:                                                                                                                                                                                                                                                                                             
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'                                                                                                                                                                                                                                                                                       
 typedef struct rsa_st RSA;                                                                                                                                                                                                                                                                                                                                                
                ^~~~~~                                                                                                                                                                                                                                                                                                                                                     
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:243:8: error: invalid use of incomplete type 'struct rsa_st'                                                                                                                                                                                                                                                         
     rsa->d = nullptr;                                                                                                                                                                                                                                                                                                                                                     
        ^~                                                                                                                                                                                                                                                                                                                                                                 
In file included from /usr/include/openssl/evp.h:14:0,                                                                                                                                                                                                                                                                                                                     
                 from /usr/include/jwt-cpp/jwt.h:9,                                                                                                                                                                                                                                                                                                                        
                 from /build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:7:                                                                                                                                                                                                                                                                                             
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'                                                                                                                                                                                                                                                                                       
 typedef struct rsa_st RSA;                                                                                                                                                                                                                                                                                                                                                
                ^~~~~~                                                                                                                                                                                                                                                                                                                                                     
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp: At global scope:                                                                                                                                                                                                                                                                                                    
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:303:5: error: 'int {anonymous}::empty_validator(const char*, char**)' defined but not used [-Werror=unused-function]                                                                                                                                                                                                 
 int empty_validator(const char *, char **) {                                                                                                                                                                                                                                                                                                                              
     ^~~~~~~~~~~~~~~                                                                                                                                                                                                                                                                                                                                                       
cc1plus: all warnings being treated as errors                                                                                                                                                                                                                                                                                                                              
CMakeFiles/SciTokens.dir/build.make:89: recipe for target 'CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o' failed                                                                                                                                                                                                                                                   

Jessie:

[ 16%] Building CXX object CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o                                                                                                                                                                                                                                                                                           
/usr/bin/c++   -DSciTokens_EXPORTS -I/build/scitokens-cpp-0.3.0  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2  -Wall -Werror -std=c++11 -fPIC   -o CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o -c /build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp                                                                  
/build/scitokens-cpp-0.3.0/src/scitokens_internal.cpp:303:5: error: 'int {anonymous}::empty_validator(const char*, char**)' defined but not used [-Werror=unused-function]                                                                                                                                                                                                 
 int empty_validator(const char *, char **) {                                                                                                                                                                                                                                                                                                                              
     ^                                                                                                                                                                                                                                                                                                                                                                     
cc1plus: all warnings being treated as errors                                                                                                                                                                                                                                                                                                                              
CMakeFiles/SciTokens.dir/build.make:89: recipe for target 'CMakeFiles/SciTokens.dir/src/scitokens_internal.cpp.o' failed                                                                                                                                                                                                                                                   

Any suggestions how to proceed?

Curl timeout while retrieving IAM public key

While using the latest released version of scitokens-cpp (1.0.0) we hit timeouts while trying to retrieve the public key for the configured IAM. In this case the IAM in question is https://wlcg.cloud.cnaf.infn.it/

The corresponding trace in the logs is the following:

230413 00:53:33 10141 scitokens_GenerateAcls: ACL generation from SciToken failed: Timeout was reached
230413 00:53:33 10141 scitokens_Access: Failed to generate ACLs for token

Below you can find the relevant part of the trace which throws the exception. [1]

While investigating this, modifyin the default_timeout used here [2] when doing the CURL requests from 4 to 10 seconds, reliably fixed out issues. Therefore, could the default value be a bit higher to accomodate such slow instances or at least be somehow configurable via the XrdSciTokens plug-in?

Thanks!

[2] https://github.com/scitokens/scitokens-cpp/blob/master/src/scitokens_internal.h#L70
[1]

#0  0x00007fa7fee85bed in __cxa_throw () from /lib64/libstdc++.so.6
#1  0x00007fa7f528b0aa in scitokens::internal::SimpleCurlGet::perform_continue() () from /lib64/libSciTokens.so.0
#2  0x00007fa7f528e529 in scitokens::Validator::get_public_keys_from_web_continue(std::unique_ptr<scitokens::AsyncStatus, std::default_delete<scitokens::AsyncStatus> >) () from /lib64/libSciTokens.so.0
#3  0x00007fa7f528ff66 in scitokens::Validator::get_public_key_pem_continue(std::unique_ptr<scitokens::AsyncStatus, std::default_delete<scitokens::AsyncStatus> >, std::string&, std::string&) ()
   from /lib64/libSciTokens.so.0
#4  0x00007fa7f528761f in scitokens::Validator::verify_async_continue(std::unique_ptr<scitokens::AsyncStatus, std::default_delete<scitokens::AsyncStatus> >) () from /lib64/libSciTokens.so.0
#5  0x00007fa7f5289d2c in scitokens::Validator::verify(scitokens::SciToken const&, long) () from /lib64/libSciTokens.so.0
#6  0x00007fa7f52765df in enforcer_generate_acls () from /lib64/libSciTokens.so.0
#7  0x00007fa7f54eb345 in XrdAccSciTokens::GenerateAcls (groups=std::vector of length 0, capacity 0, map_rules=std::vector of length 0, capacity 0, issuer="", token_subject="", username="",
    rules=std::vector of length 0, capacity 0, cache_expiry=<synthetic pointer>: <optimized out>,
    authz="xyz"..., this=0x61300000bb80) at /usr/src/debug/xrootd-5.5.8/src/XrdSciTokens/XrdSciTokensAccess.cc:771
#8  XrdAccSciTokens::Access (this=<optimized out>, Entity=<optimized out>, path=<optimized out>, oper=<optimized out>, env=<optimized out>) at /usr/src/debug/xrootd-5.5.8/src/XrdSciTokens/XrdSciTokensAccess.cc:488
#9  0x00007fa7183bd513 in Macaroons::Authz::Access (this=0x607000012a10, Entity=<optimized out>, path=<optimized out>, oper=<optimized out>, env=<optimized out>)

Bump scitokens-cpp .so version

We ran into issues at a site running XRootD 5.6.3 with scitokens-cpp-0.7.3-1.el8.x86_64:

Plugin /lib64/libXrdAccSciTokens-5.so: undefined symbol: scitoken_config_set_str authlib libXrdAccSciTokens-5.so

XRootD BuildRequires: scitokens-cpp-devel which results in the following requirement:

[blin@ap22 ~]$ rpm -q xrootd-scitokens
xrootd-scitokens-5.6.3-1.2.osg23.el8.x86_64
[blin@ap22 ~]$ rpm -q --requires xrootd-scitokens | head -n1
libSciTokens.so.0()(64bit)

This is unfortunately satisfied by 0.7.3 so Yum doesn't automatically pull in the actually required version of at least v1.0.2

storage.modify scope not honoured by scitokens-cpp

Hi,

while testing scope-based authz support in XRootD with @dciangot and @riccardodimaria we noticed that the scitokens library is not compliant with the WLCG profile. The storage.modify scope, in particular, is not honoured. Probably the cause of this is the following code:

if (me->m_validate_profile == SciToken::Profile::COMPAT &&

There's no "storage.write" scope in the WLCG profile.

And probably this shows up only in compatibility mode, which is however used by default IIUC.

Don't attempt to read public keys more than once every 5 minutes

I haven't tested it, but according to the code it appears that if reading of the public keys fail, this library will re-try reading those keys with every validation attempt. Instead, there should be a "negative cache" recorded so the keys are only attempted to be read every 5 minutes. Otherwise it could end up with a much higher load on the server when it is already having problems, plus it could cause unnecessary delays on validation.

(As a side note, reading public keys every 10 minutes after a success seems excessive. 30 minutes sounds more reasonable to me. I would still leave re-tries every 5 minutes though. These numbers are based on my experience with cvmfs and frontier caching. The scitokens python library sets it to 60 minutes, which is also reasonable.)

Cache is unreadable by non-original user

With xrootd-multiuser, scitokens changes user before reading the keycache. The keycache is in a directory with 700 permissions, and therefore is unable to read the keycache on initial creation.

The directory should be created with 755, there is nothing private in the keycache. But should the cache itself be writable by other users? It would need to be in order to update an expired public key.

Lbrary and binary not installed if `-DBUILD_UNITTESTS=YES` is set

Packaging systems on Debian, Gentoo etc. run CMake once, configuring and then finally building the package. Afterwards, package tests are executed. If tests are successful, the package is installed.

Since b5855a7 , this does not work with scitokens-cpp anymore, which means tests can not be run in packaging (unless patching the CMakeLists.txt).

Current Debian packaging has worked around this by not using make install of this package, but instead manually installing the binaries and library. For Gentoo, I am reverting the aforementioned patch.

Could this patch be reverted upstream? This would allow getting rid of downstream workarounds.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.