static void hash_key(struct crypto_tfm *tfm, u8 *key, unsigned int keylen) { struct scatterlist tmp; sg_set_buf(&tmp, key, keylen); crypto_digest_digest(tfm, &tmp, 1, key); }
inline void iscsi_hdr_digest(struct iscsi_conn *conn, struct iscsi_buf *buf, u8* crc) { struct iscsi_tcp_conn *tcp_conn = conn->dd_data; crypto_digest_digest(tcp_conn->tx_tfm, &buf->sg, 1, crc); buf->sg.length += sizeof(uint32_t); }
static void hash_key(struct crypto_tfm *tfm, u8 *key, unsigned int keylen) { struct scatterlist tmp; tmp.page = virt_to_page(key); tmp.offset = offset_in_page(key); tmp.length = keylen; crypto_digest_digest(tfm, &tmp, 1, key); }
/* * Key Derivation, from RFC 3078, RFC 3079. * Equivalent to Get_Key() for MS-CHAP as described in RFC 3079. */ static void get_new_key_from_sha(struct ppp_mppe_state * state) { struct scatterlist sg[4]; setup_sg(&sg[0], state->master_key, state->keylen); setup_sg(&sg[1], sha_pad->sha_pad1, sizeof(sha_pad->sha_pad1)); setup_sg(&sg[2], state->session_key, state->keylen); setup_sg(&sg[3], sha_pad->sha_pad2, sizeof(sha_pad->sha_pad2)); crypto_digest_digest (state->sha1, sg, 4, state->sha1_digest); }
int iscsi_tcp_hdr_recv(struct iscsi_conn *conn) { int ahslen; struct iscsi_hdr *hdr; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; uint32_t cdgst, rdgst = 0; hdr = tcp_conn->in.hdr; /* verify PDU length */ tcp_conn->in.datalen = ntoh24(hdr->dlength); if (tcp_conn->in.datalen > conn->max_recv_dlength) { printk(KERN_ERR "iscsi_tcp: datalen %d > %d\n", tcp_conn->in.datalen, conn->max_recv_dlength); return ISCSI_ERR_DATALEN; } tcp_conn->data_copied = 0; /* read AHS */ ahslen = hdr->hlength << 2; tcp_conn->in.offset += ahslen; tcp_conn->in.copy -= ahslen; if (tcp_conn->in.copy < 0) { printk(KERN_ERR "iscsi_tcp: can't handle AHS with length " "%d bytes\n", ahslen); return ISCSI_ERR_AHSLEN; } /* calculate read padding */ tcp_conn->in.padding = tcp_conn->in.datalen & (ISCSI_PAD_LEN-1); if (tcp_conn->in.padding) { tcp_conn->in.padding = ISCSI_PAD_LEN - tcp_conn->in.padding; debug_scsi("read padding %d bytes\n", tcp_conn->in.padding); } if (conn->hdrdgst_en) { struct scatterlist sg; sg_init_one(&sg, (u8 *)hdr, sizeof(struct iscsi_hdr) + ahslen); crypto_digest_digest(tcp_conn->rx_tfm, &sg, 1, (u8 *)&cdgst); rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + ahslen); if (cdgst != rdgst) { printk(KERN_ERR "iscsi_tcp: hdrdgst error " "recv 0x%x calc 0x%x\n", rdgst, cdgst); return ISCSI_ERR_HDR_DGST; } } return 0; }