本文整理汇总了C++中CJOSE_ERROR函数的典型用法代码示例。如果您正苦于以下问题:C++ CJOSE_ERROR函数的具体用法?C++ CJOSE_ERROR怎么用?C++ CJOSE_ERROR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CJOSE_ERROR函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _cjose_jws_build_sig_hmac_sha
static bool _cjose_jws_build_sig_hmac_sha(cjose_jws_t *jws, const cjose_jwk_t *jwk, cjose_err *err)
{
// ensure jwk is OCT
if (jwk->kty != CJOSE_JWK_KTY_OCT)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// allocate buffer for signature
jws->sig_len = jws->dig_len;
jws->sig = (uint8_t *)cjose_get_alloc()(jws->sig_len);
if (NULL == jws->sig)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return false;
}
memcpy(jws->sig, jws->dig, jws->sig_len);
// base64url encode signed digest
if (!cjose_base64url_encode((const uint8_t *)jws->sig, jws->sig_len, &jws->sig_b64u, &jws->sig_b64u_len, err))
{
CJOSE_ERROR(err, CJOSE_ERR_CRYPTO);
return false;
}
return true;
}
示例2: _cjose_jws_verify_sig_hmac_sha
static bool _cjose_jws_verify_sig_hmac_sha(cjose_jws_t *jws, const cjose_jwk_t *jwk, cjose_err *err)
{
bool retval = false;
// ensure jwk is OCT
if (jwk->kty != CJOSE_JWK_KTY_OCT)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
goto _cjose_jws_verify_sig_hmac_sha_cleanup;
}
// verify decrypted digest matches computed digest
if ((cjose_const_memcmp(jws->dig, jws->sig, jws->dig_len) != 0) || (jws->sig_len != jws->dig_len))
{
CJOSE_ERROR(err, CJOSE_ERR_CRYPTO);
goto _cjose_jws_verify_sig_hmac_sha_cleanup;
}
// if we got this far - success
retval = true;
_cjose_jws_verify_sig_hmac_sha_cleanup:
return retval;
}
示例3: _cjose_jwe_malloc
static bool _cjose_jwe_malloc(
size_t bytes, bool random,
uint8_t **buffer,
cjose_err *err)
{
*buffer = (uint8_t *)cjose_get_alloc()(bytes);
if (NULL == *buffer)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return false;
}
if (random)
{
if (RAND_bytes((unsigned char *)*buffer, bytes) != 1)
{
cjose_get_dealloc()(*buffer);
CJOSE_ERROR(err, CJOSE_ERR_CRYPTO);
return false;
}
}
else
{
memset(*buffer, 0, bytes);
}
return true;
}
示例4: _cjose_jwe_import_part
bool _cjose_jwe_import_part(
cjose_jwe_t *jwe,
size_t p,
const char *b64u,
size_t b64u_len,
cjose_err *err)
{
// only the ek and the data parts may be of zero length
if (b64u_len == 0 && p != 1 && p != 3)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// copy the b64u part to the jwe
jwe->part[p].b64u = strdup(b64u);
if (NULL == jwe->part[p].b64u)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return false;
}
jwe->part[p].b64u_len = b64u_len;
// b64u decode the part
if (!cjose_base64url_decode(
jwe->part[p].b64u, jwe->part[p].b64u_len,
(uint8_t **)&jwe->part[p].raw, &jwe->part[p].raw_len, err) ||
NULL == jwe->part[p].raw)
{
return false;
}
return true;
}
示例5: _cjose_jwe_build_hdr
static bool _cjose_jwe_build_hdr(
cjose_jwe_t *jwe,
cjose_header_t *header,
cjose_err *err)
{
// save header object as part of the JWE (and incr. refcount)
jwe->hdr = header;
json_incref(jwe->hdr);
// serialize the header
char *hdr_str = json_dumps(header, JSON_ENCODE_ANY | JSON_PRESERVE_ORDER);
if (NULL == hdr_str)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return false;
}
// copy the serialized header to JWE (hdr_str is owned by header object)
jwe->part[0].raw = (uint8_t *)strdup(hdr_str);
if (NULL == jwe->part[0].raw)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
cjose_get_dealloc()(hdr_str);
return false;
}
jwe->part[0].raw_len = strlen(hdr_str);
cjose_get_dealloc()(hdr_str);
return true;
}
示例6: _EC_private_fields
static bool _EC_private_fields(
const cjose_jwk_t *jwk, json_t *json, cjose_err *err)
{
ec_keydata *keydata = (ec_keydata *)jwk->keydata;
const BIGNUM *bnD = EC_KEY_get0_private_key(keydata->key);
uint8_t *buffer = NULL;
char *b64u = NULL;
size_t len = 0,
offset = 0;
json_t *field = NULL;
bool result = false;
// track expected binary data size
uint8_t numsize = _ec_size_for_curve(keydata->crv, err);
// short circuit if 'd' is NULL or 0
if (!bnD || BN_is_zero(bnD))
{
return true;
}
buffer = cjose_get_alloc()(numsize);
if (!buffer)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
goto _ec_to_string_cleanup;
}
offset = numsize - BN_num_bytes(bnD);
memset(buffer, 0, numsize);
BN_bn2bin(bnD, (buffer + offset));
if (!cjose_base64url_encode(buffer, numsize, &b64u, &len, err))
{
goto _ec_to_string_cleanup;
}
field = json_stringn(b64u, len);
if (!field)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
goto _ec_to_string_cleanup;
}
json_object_set(json, "d", field);
json_decref(field);
field = NULL;
cjose_get_dealloc()(b64u);
b64u = NULL;
result = true;
_ec_to_string_cleanup:
if (buffer)
{
cjose_get_dealloc()(buffer);
}
return result;
}
示例7: CJOSE_ERROR
cjose_jwk_t *cjose_jwk_create_RSA_spec(
const cjose_jwk_rsa_keyspec *spec, cjose_err *err)
{
if (NULL == spec)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return NULL;
}
bool hasPub = (NULL != spec->n && 0 < spec->nlen) &&
(NULL != spec->e && 0 < spec->elen);
bool hasPriv = (NULL != spec->n && 0 < spec->nlen) &&
(NULL != spec->d && 0 < spec->dlen);
if (!hasPub && !hasPriv)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return NULL;
}
RSA *rsa = NULL;
rsa = RSA_new();
if (!rsa)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return NULL;
}
if (hasPriv)
{
if (!_cjose_jwk_rsa_set(rsa, spec->n, spec->nlen, spec->e, spec->elen, spec->d, spec->dlen))
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
goto create_RSA_spec_failed;
}
_cjose_jwk_rsa_set_factors(rsa, spec->p, spec->plen, spec->q, spec->qlen);
_cjose_jwk_rsa_set_crt(rsa, spec->dp, spec->dplen, spec->dq, spec->dqlen, spec->qi, spec->qilen);
}
else if (hasPub)
{
if (!_cjose_jwk_rsa_set(rsa, spec->n, spec->nlen, spec->e, spec->elen, NULL, 0))
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
goto create_RSA_spec_failed;
}
}
return _RSA_new(rsa, err);
create_RSA_spec_failed:
if (rsa)
{
RSA_free(rsa);
}
return NULL;
}
示例8: _cjose_jwe_validate_hdr
static bool _cjose_jwe_validate_hdr(
cjose_jwe_t *jwe,
cjose_header_t *header,
cjose_err *err)
{
// make sure we have an alg header
json_t *alg_obj = json_object_get(header, CJOSE_HDR_ALG);
if (NULL == alg_obj)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
const char *alg = json_string_value(alg_obj);
// make sure we have an enc header
json_t *enc_obj = json_object_get(header, CJOSE_HDR_ENC);
if (NULL == enc_obj)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
const char *enc = json_string_value(enc_obj);
// set JWE build functions based on header contents
if (strcmp(alg, CJOSE_HDR_ALG_RSA_OAEP) == 0)
{
jwe->fns.encrypt_ek = _cjose_jwe_encrypt_ek_rsa_oaep;
jwe->fns.decrypt_ek = _cjose_jwe_decrypt_ek_rsa_oaep;
}
if (strcmp(alg, CJOSE_HDR_ALG_DIR) == 0)
{
jwe->fns.encrypt_ek = _cjose_jwe_encrypt_ek_dir;
jwe->fns.decrypt_ek = _cjose_jwe_decrypt_ek_dir;
}
if (strcmp(enc, CJOSE_HDR_ENC_A256GCM) == 0)
{
jwe->fns.set_cek = _cjose_jwe_set_cek_a256gcm;
jwe->fns.set_iv = _cjose_jwe_set_iv_a256gcm;
jwe->fns.encrypt_dat = _cjose_jwe_encrypt_dat_a256gcm;
jwe->fns.decrypt_dat = _cjose_jwe_decrypt_dat_a256gcm;
}
// ensure required builders have been assigned
if (NULL == jwe->fns.set_cek ||
NULL == jwe->fns.encrypt_ek ||
NULL == jwe->fns.decrypt_ek ||
NULL == jwe->fns.set_iv ||
NULL == jwe->fns.encrypt_dat ||
NULL == jwe->fns.decrypt_dat)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
return true;
}
示例9: _RSA_json_field
static inline bool _RSA_json_field(
BIGNUM *param, const char *name, json_t *json, cjose_err *err)
{
json_t *field = NULL;
uint8_t *data = NULL;
char *b64u = NULL;
size_t datalen = 0,
b64ulen = 0;
bool result = false;
if (!param)
{
return true;
}
datalen = BN_num_bytes(param);
data = cjose_get_alloc()(sizeof(uint8_t) * datalen);
if (!data)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
goto RSA_json_field_cleanup;
}
BN_bn2bin(param, data);
if (!cjose_base64url_encode(data, datalen, &b64u, &b64ulen, err))
{
goto RSA_json_field_cleanup;
}
field = json_stringn(b64u, b64ulen);
if (!field)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
goto RSA_json_field_cleanup;
}
json_object_set(json, name, field);
json_decref(field);
field = NULL;
result = true;
RSA_json_field_cleanup:
if (b64u)
{
cjose_get_dealloc()(b64u);
b64u = NULL;
}
if (data)
{
cjose_get_dealloc()(data);
data = NULL;
}
return result;
}
示例10: _cjose_jwe_encrypt_ek_rsa_oaep
static bool _cjose_jwe_encrypt_ek_rsa_oaep(
cjose_jwe_t *jwe,
const cjose_jwk_t *jwk,
cjose_err *err)
{
// jwk must be RSA and have the necessary public parts set
if (jwk->kty != CJOSE_JWK_KTY_RSA ||
NULL == jwk->keydata ||
NULL == ((RSA *)jwk->keydata)->e ||
NULL == ((RSA *)jwk->keydata)->n)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// generate random cek
if (!jwe->fns.set_cek(jwe, NULL, err))
{
return false;
}
// the size of the ek will match the size of the RSA key
jwe->part[1].raw_len = RSA_size((RSA *)jwk->keydata);
// for OAEP padding - the RSA size - 41 must be greater than input
if (jwe->cek_len >= jwe->part[1].raw_len - 41)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// allocate memory for RSA encryption
cjose_get_dealloc()(jwe->part[1].raw);
if (!_cjose_jwe_malloc(jwe->part[1].raw_len, false, &jwe->part[1].raw, err))
{
return false;
}
// encrypt the CEK using RSAES-OAEP
if (RSA_public_encrypt(jwe->cek_len, jwe->cek, jwe->part[1].raw,
(RSA *)jwk->keydata, RSA_PKCS1_OAEP_PADDING) !=
jwe->part[1].raw_len)
{
CJOSE_ERROR(err, CJOSE_ERR_CRYPTO);
return false;
}
return true;
}
示例11: _cjose_jws_build_cser
static bool _cjose_jws_build_cser(cjose_jws_t *jws, cjose_err *err)
{
// both sign and import should be setting these - but check just in case
if (NULL == jws->hdr_b64u || NULL == jws->dat_b64u || NULL == jws->sig_b64u)
{
return false;
}
// compute length of compact serialization
jws->cser_len = jws->hdr_b64u_len + jws->dat_b64u_len + jws->sig_b64u_len + 3;
// allocate buffer for compact serialization
assert(NULL == jws->cser);
jws->cser = (char *)cjose_get_alloc()(jws->cser_len);
if (NULL == jws->cser)
{
CJOSE_ERROR(err, CJOSE_ERR_NO_MEMORY);
return false;
}
// build the compact serialization
snprintf(jws->cser, jws->cser_len, "%s.%s.%s", jws->hdr_b64u, jws->dat_b64u, jws->sig_b64u);
return true;
}
示例12: cjose_jws_verify
bool cjose_jws_verify(cjose_jws_t *jws, const cjose_jwk_t *jwk, cjose_err *err)
{
if (NULL == jws || NULL == jwk)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// validate JWS header
if (!_cjose_jws_validate_hdr(jws, err))
{
return false;
}
// build JWS digest from header and payload (hashed signing input value)
if (!jws->fns.digest(jws, jwk, err))
{
return false;
}
// verify JWS signature
if (!jws->fns.verify(jws, jwk, err))
{
return false;
}
return true;
}
示例13: CJOSE_ERROR
uint8_t *cjose_jwe_decrypt(
cjose_jwe_t *jwe,
const cjose_jwk_t *jwk,
size_t *content_len,
cjose_err *err)
{
if (NULL == jwe || NULL == jwk || NULL == content_len)
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return NULL;
}
// decrypt JWE content-encryption key from encrypted key
if (!jwe->fns.decrypt_ek(jwe, jwk, err))
{
return NULL;
}
// decrypt JWE encrypted data
if (!jwe->fns.decrypt_dat(jwe, err))
{
return NULL;
}
// take the plaintext data from the jwe object
uint8_t *content = jwe->dat;
*content_len = jwe->dat_len;
jwe->dat = NULL;
jwe->dat_len = 0;
return content;
}
示例14: cjose_jwk_hkdf
bool cjose_jwk_hkdf(
const EVP_MD *md,
const uint8_t *salt,
size_t salt_len,
const uint8_t *info,
size_t info_len,
const uint8_t *ikm,
size_t ikm_len,
uint8_t *okm,
unsigned int okm_len,
cjose_err *err)
{
// current impl. is very limited: SHA256, 256 bit output, and no info
if ((EVP_sha256() != md) || (0 != info_len) || (32 != okm_len)) {
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
return false;
}
// HKDF-Extract, HMAC-SHA256(salt, IKM) -> PRK
unsigned int prk_len;
unsigned char prk[EVP_MAX_MD_SIZE];
HMAC(md, salt, salt_len, ikm, ikm_len, prk, &prk_len);
// HKDF-Expand, HMAC-SHA256(PRK,0x01) -> OKM
const unsigned char t[] = { 0x01 };
HMAC(md, prk, prk_len, t, sizeof(t), okm, NULL);
return true;
}
示例15: CJOSE_ERROR
static cjose_jwk_t *_cjose_jwk_import_oct(json_t *jwk_json, cjose_err *err)
{
cjose_jwk_t *jwk = NULL;
uint8_t *k_buffer = NULL;
// get the decoded value of k (buflen = 0 means no particular expected len)
size_t k_buflen = 0;
if (!_decode_json_object_base64url_attribute(
jwk_json, CJOSE_JWK_K_STR, &k_buffer, &k_buflen, err))
{
CJOSE_ERROR(err, CJOSE_ERR_INVALID_ARG);
goto import_oct_cleanup;
}
// create the jwk
jwk = cjose_jwk_create_oct_spec(k_buffer, k_buflen, err);
import_oct_cleanup:
if (NULL != k_buffer)
{
cjose_get_dealloc()(k_buffer);
}
return jwk;
}