#include <haproxy/openssl-compat.h>
#include <haproxy/jwt-t.h>
-int bn2base64url(const BIGNUM *bn, char *dst, size_t dsize);
-int EVP_PKEY_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize);
+size_t bn2base64url(const BIGNUM *bn, char *dst, size_t dsize);
+size_t EVP_PKEY_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize);
enum jwt_alg EVP_PKEY_to_jws_alg(EVP_PKEY *pkey);
-int jws_b64_payload(char *payload, char *dst, size_t dsize);
-int jws_b64_protected(enum jwt_alg alg, char *kid, char *jwk, char *nonce, char *url, char *dst, size_t dsize);
-int jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, char *b64protected, char *b64payload, char *dst, size_t dsize);
-int jws_flattened(char *protected, char *payload, char *signature, char *dst, size_t dsize);
-int jws_thumbprint(EVP_PKEY *pkey, char *dst, size_t dsize);
+size_t jws_b64_payload(char *payload, char *dst, size_t dsize);
+size_t jws_b64_protected(enum jwt_alg alg, char *kid, char *jwk, char *nonce, char *url, char *dst, size_t dsize);
+size_t jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, char *b64protected, char *b64payload, char *dst, size_t dsize);
+size_t jws_flattened(char *protected, char *payload, char *signature, char *dst, size_t dsize);
+size_t jws_thumbprint(EVP_PKEY *pkey, char *dst, size_t dsize);
#endif /* ! _HAPROXY_JWK_H_ */
*
* Return the size of the data dumped in <dst>
*/
-int bn2base64url(const BIGNUM *bn, char *dst, size_t dsize)
+size_t bn2base64url(const BIGNUM *bn, char *dst, size_t dsize)
{
struct buffer *bin;
int binlen;
ret = a2base64url(bin->area, binlen, dst, dsize);
out:
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
/*
*
* Return the size of the data or 0
*/
-static int EVP_PKEY_EC_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
+static size_t EVP_PKEY_EC_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
{
BIGNUM *x = NULL, *y = NULL;
struct buffer *str_x = NULL, *str_y = NULL;
BN_free(x);
BN_free(y);
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
/*
*
* Return the size of the data or 0
*/
-static int EVP_PKEY_RSA_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
+static size_t EVP_PKEY_RSA_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
{
BIGNUM *n = NULL, *e = NULL;
struct buffer *str_n = NULL, *str_e = NULL;
free_trash_chunk(str_n);
free_trash_chunk(str_e);
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
/* Convert an EVP_PKEY to a public key JWK
*
* Return the size of the data or 0
*/
-int EVP_PKEY_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
+size_t EVP_PKEY_to_pub_jwk(EVP_PKEY *pkey, char *dst, size_t dsize)
{
- int ret = 0;
+ size_t ret = 0;
switch (EVP_PKEY_base_id(pkey)) {
case EVP_PKEY_RSA:
* Return the size of the data or 0
*/
-int jws_b64_protected(enum jwt_alg alg, char *kid, char *jwk, char *nonce, char *url,
- char *dst, size_t dsize)
+size_t jws_b64_protected(enum jwt_alg alg, char *kid, char *jwk, char *nonce, char *url,
+ char *dst, size_t dsize)
{
char *acc;
char *acctype;
ret = a2base64url(json->area, json->data, dst, dsize);
out:
free_trash_chunk(json);
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
/*
* Return the size of the data or 0
*/
-int jws_b64_payload(char *payload, char *dst, size_t dsize)
+size_t jws_b64_payload(char *payload, char *dst, size_t dsize)
{
int ret = 0;
ret = a2base64url(payload, strlen(payload), dst, dsize);
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
/*
*
* Return the size of the data or 0
*/
-int jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, char *b64protected, char *b64payload, char *dst, size_t dsize)
+size_t jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, char *b64protected, char *b64payload, char *dst, size_t dsize)
{
EVP_MD_CTX *ctx;
const EVP_MD *evp_md = NULL;
out:
free_trash_chunk(sign);
- return ret;
-
+ if (ret > 0)
+ return ret;
+ return 0;
}
/*
*
* Return the size of the data or 0
*/
-int jws_thumbprint(EVP_PKEY *pkey, char *dst, size_t dsize)
+size_t jws_thumbprint(EVP_PKEY *pkey, char *dst, size_t dsize)
{
int ret = 0;
struct buffer *jwk = NULL;
out:
free_trash_chunk(jwk);
- return ret;
+ if (ret > 0)
+ return ret;
+ return 0;
}
-int jws_flattened(char *protected, char *payload, char *signature, char *dst, size_t dsize)
+size_t jws_flattened(char *protected, char *payload, char *signature, char *dst, size_t dsize)
{
int ret = 0;
if (ret >= dsize)
ret = 0;
- return ret;
+
+ if (ret > 0)
+ return ret;
+ return 0;
}