Lines Matching refs:csc
31 struct lws_cose_sign_context *csc;
45 csc = lws_zalloc(sizeof(*csc), __func__);
46 if (!csc)
49 csc->info = *info;
51 return csc;
55 lws_cose_sign_add(struct lws_cose_sign_context *csc, cose_param_t alg,
58 lws_cose_sig_alg_t *si = lws_cose_sign_alg_create(csc->info.cx, ck, alg,
64 lws_dll2_add_tail(&si->list, &csc->algs);
79 lws_cose_sign_hashing(struct lws_cose_sign_context *csc,
87 lws_dll2_get_head(&csc->algs)) {
104 lws_cose_sign_payload_chunk(struct lws_cose_sign_context *csc,
115 switch (csc->tli) {
123 if (!csc->algs.count) {
128 csc->type = SIGTYPE_MULTI;
129 alg = lws_container_of(csc->algs.head, lws_cose_sig_alg_t, list);
136 // if (csc->info.sigtype == SIGTYPE_MAC0)
137 csc->type = SIGTYPE_MAC0;
139 // csc->type = SIGTYPE_MAC;
143 if (csc->algs.count == 1) {
144 if (!csc->info.sigtype && csc->type == SIGTYPE_MAC) {
145 if (csc->info.flags & LCSC_FL_ADD_CBOR_PREFER_MAC0)
146 csc->type = SIGTYPE_MAC0;
148 if (!csc->info.sigtype ||
149 csc->info.sigtype == SIGTYPE_SINGLE) /* ie, if no hint */
150 csc->type = SIGTYPE_SINGLE;
153 lwsl_notice("%s: decided on type %d\n", __func__, csc->type);
159 if (csc->info.flags & LCSC_FL_ADD_CBOR_TAG) {
160 ret = lws_lec_printf(csc->info.lec, "%t(",
161 cose_tags[csc->type]);
169 switch (csc->type) {
183 csc->info.lec->scratch[csc->info.lec->scratch_len++] = c;
189 lws_cose_sign_hashing(csc, sig_mctx[csc->type],
190 sig_mctx_len[csc->type]);
192 csc->tli = ST_OUTER_PROTECTED;
193 csc->subsequent = 0;
204 switch (csc->type) {
207 alg = lws_container_of(csc->algs.head,
220 if (!csc->subsequent) {
224 lws_cose_sign_hashing(csc, lec1.scratch,
226 lws_cose_sign_hashing(csc, lec.start, lec.used);
227 ret = lws_lec_printf(csc->info.lec, "%.*b",
232 csc->subsequent = 1;
239 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0, 0);
242 lws_cose_sign_hashing(csc, lec.start,
250 csc->tli = ST_OUTER_UNPROTECTED;
261 switch (csc->type) {
264 alg = lws_container_of(csc->algs.head,
268 ret = lws_lec_printf(csc->info.lec, "{%d:%.*b}",
279 lws_cose_sign_hashing(csc, lec1.scratch,
285 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0, 0);
294 lws_dll2_get_head(&csc->algs)) {
322 lws_cose_sign_hashing(csc, lec1.scratch,
327 ret = lws_lec_printf(csc->info.lec, "{}");
333 csc->tli = ST_OUTER_PAYLOAD;
334 csc->subsequent = 0;
338 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_BSTR, 0,
339 csc->info.inline_payload_len);
343 csc->info.inline_payload_len);
344 lws_cose_sign_hashing(csc, lec1.scratch,
347 lws_lec_scratch(csc->info.lec);
349 csc->rem_pay = csc->info.inline_payload_len;
355 if (csc->along) {
356 in += csc->along;
357 in_len -= csc->along;
360 lws_lec_scratch(csc->info.lec);
362 if (csc->rem_pay) {
364 lws_cose_sign_hashing(csc, in, in_len);
370 s = lws_ptr_diff_size_t(csc->info.lec->end,
371 csc->info.lec->buf);
372 if (s > (size_t)csc->rem_pay)
373 s = (size_t)csc->rem_pay;
377 memcpy(csc->info.lec->buf, in, s);
378 csc->info.lec->buf += s;
379 csc->info.lec->used = lws_ptr_diff_size_t(
380 csc->info.lec->buf,
381 csc->info.lec->start);
382 csc->rem_pay -= s;
384 csc->along = s;
391 if (csc->type == SIGTYPE_MULTI) {
393 csc->alg = lws_container_of(csc->algs.head,
397 csc->algs.count);
398 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0,
399 csc->algs.count);
400 csc->tli = ST_INNER_PROTECTED;
403 csc->tli = ST_OUTER_SIGN1_SIGNATURE;
404 csc->along = 0;
410 alg = lws_container_of(lws_dll2_get_head(&csc->algs),
418 ret = lws_lec_printf(csc->info.lec, "%.*b",
423 if (csc->type == SIGTYPE_MAC) {
424 csc->alg = lws_container_of(csc->algs.head,
428 csc->algs.count);
429 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0,
430 csc->algs.count);
431 csc->tli = ST_INNER_PROTECTED;
445 switch (csc->type) {
451 lws_lec_int(csc->info.lec, LWS_CBOR_MAJTYP_ARRAY, 0, 3);
457 (long long)csc->alg->cose_alg);
462 if (lws_lec_printf(csc->info.lec, "{1:%lld}",
463 (long long)csc->alg->cose_alg) != LWS_LECPCTX_RET_FINISHED)
473 csc->tli = ST_INNER_UNPROTECTED;
479 switch (csc->type) {
481 alg = lws_container_of(csc->algs.head,
485 ret = lws_lec_printf(csc->info.lec, "{%d:%.*b}",
494 ret = lws_lec_printf(csc->info.lec, "{}");
500 lws_cose_sign_alg_complete(csc->alg);
501 if (csc->alg->failed)
503 csc->tli = ST_INNER_SIGNATURE;
509 ret = lws_lec_printf(csc->info.lec, "%.*b",
510 (int)csc->alg->rhash_len, csc->alg->rhash);
514 if (csc->alg->list.next) {
515 csc->alg = (lws_cose_sig_alg_t *)csc->alg->list.next;
516 csc->tli = ST_INNER_PROTECTED;
528 struct lws_cose_sign_context *csc = *_csc;
530 if (!csc)
534 lws_dll2_get_head(&csc->algs)) {