int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req) { struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm); __le32 iv[AES_IV_SIZE / 4] = { ctx->iv_nonce, cpu_to_le32p((u32 *) req->info), cpu_to_le32p((u32 *) (req->info + 4)), cpu_to_le32(1) }; return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst, req->nbytes, iv, AES_IV_SIZE, ctx->sa_out, ctx->sa_len, 0); }
static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios_old) { struct acm *acm = tty->driver_data; struct ktermios *termios = tty->termios; struct usb_cdc_line_coding newline; int newctrl = acm->ctrlout; if (!ACM_READY(acm)) return; newline.dwDTERate = cpu_to_le32p(acm_tty_speed + (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0)); newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0; newline.bParityType = termios->c_cflag & PARENB ? (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0; newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4]; acm->clocal = ((termios->c_cflag & CLOCAL) != 0); if (!newline.dwDTERate) { newline.dwDTERate = acm->line.dwDTERate; newctrl &= ~ACM_CTRL_DTR; } else newctrl |= ACM_CTRL_DTR; if (newctrl != acm->ctrlout) acm_set_control(acm, acm->ctrlout = newctrl); if (memcmp(&acm->line, &newline, sizeof newline)) { memcpy(&acm->line, &newline, sizeof newline); dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate), newline.bCharFormat, newline.bParityType, newline.bDataBits); acm_set_line(acm, &acm->line); } }
static int rmd320_final(struct shash_desc *desc, u8 *out) { struct rmd320_ctx *rctx = shash_desc_ctx(desc); u32 i, index, padlen; __le64 bits; __le32 *dst = (__le32 *)out; static const u8 padding[64] = { 0x80, }; bits = cpu_to_le64(rctx->byte_count << 3); /* */ index = rctx->byte_count & 0x3f; padlen = (index < 56) ? (56 - index) : ((64+56) - index); rmd320_update(desc, padding, padlen); /* */ rmd320_update(desc, (const u8 *)&bits, sizeof(bits)); /* */ for (i = 0; i < 10; i++) dst[i] = cpu_to_le32p(&rctx->state[i]); /* */ memset(rctx, 0, sizeof(*rctx)); return 0; }
/* Add padding and return the message digest. */ static int rmd256_final(struct shash_desc *desc, u8 *out) { struct rmd256_ctx *rctx = shash_desc_ctx(desc); u32 i, index, padlen; __le64 bits; __le32 *dst = (__le32 *)out; static const u8 padding[64] = { 0x80, }; bits = cpu_to_le64(rctx->byte_count << 3); /* Pad out to 56 mod 64 */ index = rctx->byte_count & 0x3f; padlen = (index < 56) ? (56 - index) : ((64+56) - index); rmd256_update(desc, padding, padlen); /* Append length */ rmd256_update(desc, (const u8 *)&bits, sizeof(bits)); /* Store state in digest */ for (i = 0; i < 8; i++) dst[i] = cpu_to_le32p(&rctx->state[i]); /* Wipe context */ memset(rctx, 0, sizeof(*rctx)); return 0; }
static int crc32_final(struct shash_desc *desc, u8 *out) { u32 *crcp = shash_desc_ctx(desc); *(__le32 *)out = cpu_to_le32p(crcp); return 0; }
static int crc32le_vx_final(struct shash_desc *desc, u8 *out) { struct crc_desc_ctx *ctx = shash_desc_ctx(desc); *(__le32 *)out = cpu_to_le32p(&ctx->crc); return 0; }
static void qcnmea_set_termios(struct tty_struct *tty, struct ktermios * old) { struct qcnmea *nmea = tty->driver_data; struct termios *termios = tty->termios; struct usb_cdc_line_coding newline; int newctrl = nmea->seria_out; if (!QCNMEA_READY(nmea)) return; newline.dwDTERate = cpu_to_le32p(qcnmea_tty_speed + (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0)); newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0; newline.bParityType = termios->c_cflag & PARENB ? (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0; newline.bDataBits = qcnmea_tty_size[(termios->c_cflag & CSIZE) >> 4]; nmea->clocal = ((termios->c_cflag & CLOCAL) != 0); if (!newline.dwDTERate) { newline.dwDTERate = nmea->line.dwDTERate; newctrl &= ~QCNMEA_CTRL_DTR; } else newctrl |= QCNMEA_CTRL_DTR; if (newctrl != nmea->seria_out) qcnmea_set_control(nmea, nmea->seria_out = newctrl); if (memcmp(&nmea->line, &newline, sizeof newline)) { memcpy(&nmea->line, &newline, sizeof newline); dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate), newline.bCharFormat, newline.bParityType, newline.bDataBits); qcnmea_set_line(nmea, &nmea->line); }
int crypto4xx_setkey_rfc3686(struct crypto_ablkcipher *cipher, const u8 *key, unsigned int keylen) { struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher); struct crypto4xx_ctx *ctx = crypto_tfm_ctx(tfm); int rc; rc = crypto4xx_setkey_aes(cipher, key, keylen - CTR_RFC3686_NONCE_SIZE, CRYPTO_MODE_CTR, CRYPTO_FEEDBACK_MODE_NO_FB); if (rc) return rc; ctx->iv_nonce = cpu_to_le32p((u32 *)&key[keylen - CTR_RFC3686_NONCE_SIZE]); return 0; }
static void crc32_digest_final(struct crypto_tfm *tfm, u8 *out) { u32 *crcp = crypto_tfm_ctx(tfm); *(__le32 *)out = cpu_to_le32p(crcp); }