Lines Matching refs:cc

218 cipher_ctx_is_plaintext(struct sshcipher_ctx *cc)
220 return cc->plaintext;
224 cipher_ctx_get_number(struct sshcipher_ctx *cc)
226 return cc->cipher->number;
310 cipher_warning_message(const struct sshcipher_ctx *cc)
312 if (cc == NULL || cc->cipher == NULL)
314 if (cc->cipher->number == SSH_CIPHER_DES)
325 struct sshcipher_ctx *cc = NULL;
334 if ((cc = calloc(sizeof(*cc), 1)) == NULL)
342 cc->plaintext = (cipher->number == SSH_CIPHER_NONE);
343 cc->encrypt = do_encrypt;
351 cc->cipher = cipher;
352 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) {
353 ret = chachapoly_init(&cc->cp_ctx, key, keylen);
357 if ((cc->cipher->flags & CFLAG_AESCTR) != 0) {
358 aesctr_keysetup(&cc->ac_ctx, key, 8 * keylen, 8 * ivlen);
359 aesctr_ivsetup(&cc->ac_ctx, iv);
363 if ((cc->cipher->flags & CFLAG_NONE) != 0) {
371 if ((cc->evp = EVP_CIPHER_CTX_new()) == NULL) {
375 if (EVP_CipherInit(cc->evp, type, NULL, (u_char *)iv,
381 !EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_SET_IV_FIXED,
386 klen = EVP_CIPHER_CTX_key_length(cc->evp);
388 if (EVP_CIPHER_CTX_set_key_length(cc->evp, keylen) == 0) {
393 if (EVP_CipherInit(cc->evp, NULL, (u_char *)key, NULL, -1) == 0) {
405 ret = EVP_Cipher(cc->evp, discard, junk, cipher->discard_len);
419 *ccp = cc;
421 if (cc != NULL) {
423 if (cc->evp != NULL)
424 EVP_CIPHER_CTX_free(cc->evp);
426 explicit_bzero(cc, sizeof(*cc));
427 free(cc);
444 cipher_crypt(struct sshcipher_ctx *cc, u_int seqnr, u_char *dest,
447 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) {
448 return chachapoly_crypt(&cc->cp_ctx, seqnr, dest, src,
449 len, aadlen, authlen, cc->encrypt);
452 if ((cc->cipher->flags & CFLAG_AESCTR) != 0) {
455 aesctr_encrypt_bytes(&cc->ac_ctx, src + aadlen,
459 if ((cc->cipher->flags & CFLAG_NONE) != 0) {
468 if (authlen != cipher_authlen(cc->cipher))
471 if (!EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_IV_GEN,
475 if (!cc->encrypt &&
476 !EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_SET_TAG,
482 EVP_Cipher(cc->evp, NULL, (u_char *)src, aadlen) < 0)
486 if (len % cc->cipher->block_size)
488 if (EVP_Cipher(cc->evp, dest + aadlen, (u_char *)src + aadlen,
493 if (EVP_Cipher(cc->evp, NULL, NULL, 0) < 0)
494 return cc->encrypt ?
496 if (cc->encrypt &&
497 !EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_GET_TAG,
507 cipher_get_length(struct sshcipher_ctx *cc, u_int *plenp, u_int seqnr,
510 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
511 return chachapoly_get_length(&cc->cp_ctx, plenp, seqnr,
520 cipher_free(struct sshcipher_ctx *cc)
522 if (cc == NULL)
524 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
525 explicit_bzero(&cc->cp_ctx, sizeof(cc->cp_ctx));
526 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0)
527 explicit_bzero(&cc->ac_ctx, sizeof(cc->ac_ctx));
529 if (cc->evp != NULL) {
530 EVP_CIPHER_CTX_free(cc->evp);
531 cc->evp = NULL;
534 explicit_bzero(cc, sizeof(*cc));
535 free(cc);
566 cipher_get_keyiv_len(const struct sshcipher_ctx *cc)
568 const struct sshcipher *c = cc->cipher;
573 else if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
575 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0)
576 ivlen = sizeof(cc->ac_ctx.ctr);
579 ivlen = EVP_CIPHER_CTX_iv_length(cc->evp);
585 cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len)
587 const struct sshcipher *c = cc->cipher;
592 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) {
597 if ((cc->cipher->flags & CFLAG_AESCTR) != 0) {
598 if (len != sizeof(cc->ac_ctx.ctr))
600 memcpy(iv, cc->ac_ctx.ctr, len);
603 if ((cc->cipher->flags & CFLAG_NONE) != 0)
611 evplen = EVP_CIPHER_CTX_iv_length(cc->evp);
620 ssh_aes_ctr_iv(cc->evp, 0, iv, len);
624 if (!EVP_CIPHER_CTX_ctrl(cc->evp, EVP_CTRL_GCM_IV_GEN,
628 memcpy(iv, cc->evp->iv, len);
633 return ssh1_3des_iv(cc->evp, 0, iv, 24);
642 cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv)
644 const struct sshcipher *c = cc->cipher;
649 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
651 if ((cc->cipher->flags & CFLAG_NONE) != 0)
659 evplen = EVP_CIPHER_CTX_iv_length(cc->evp);
665 ssh_aes_ctr_iv(cc->evp, 1, (u_char *)iv, evplen);
670 if (!EVP_CIPHER_CTX_ctrl(cc->evp,
674 memcpy(cc->evp->iv, iv, evplen);
679 return ssh1_3des_iv(cc->evp, 1, (u_char *)iv, 24);
693 cipher_get_keycontext(const struct sshcipher_ctx *cc, u_char *dat)
696 const struct sshcipher *c = cc->cipher;
700 plen = EVP_X_STATE_LEN(cc->evp);
703 memcpy(dat, EVP_X_STATE(cc->evp), plen);
712 cipher_set_keycontext(struct sshcipher_ctx *cc, const u_char *dat)
715 const struct sshcipher *c = cc->cipher;
719 plen = EVP_X_STATE_LEN(cc->evp);
720 memcpy(EVP_X_STATE(cc->evp), dat, plen);