int crypto_put_output_data(uchar_t *buf, crypto_data_t *output, int len) { switch (output->cd_format) { case CRYPTO_DATA_RAW: if (output->cd_raw.iov_len < len) { output->cd_length = len; return (CRYPTO_BUFFER_TOO_SMALL); } bcopy(buf, (uchar_t *)(output->cd_raw.iov_base + output->cd_offset), len); break; case CRYPTO_DATA_UIO: return (crypto_uio_data(output, buf, len, COPY_TO_DATA, NULL, NULL)); /* CURRENTLY UNSUPPORTED */ /* case CRYPTO_DATA_MBLK: return (crypto_mblk_data(output, buf, len, COPY_TO_DATA, NULL, NULL)); */ default: return (CRYPTO_ARGUMENTS_BAD); } return (CRYPTO_SUCCESS); }
/* * Utility routine to get data from a crypto_data structure. * * '*dptr' contains a pointer to a buffer on return. 'buf' * is allocated by the caller and is ignored for CRYPTO_DATA_RAW case. */ int crypto_get_input_data(crypto_data_t *input, uchar_t **dptr, uchar_t *buf) { int rv; switch (input->cd_format) { case CRYPTO_DATA_RAW: if (input->cd_raw.iov_len < input->cd_length) return (CRYPTO_ARGUMENTS_BAD); *dptr = (uchar_t *)(input->cd_raw.iov_base + input->cd_offset); break; case CRYPTO_DATA_UIO: if ((rv = crypto_uio_data(input, buf, input->cd_length, COPY_FROM_DATA, NULL, NULL)) != CRYPTO_SUCCESS) return (rv); *dptr = buf; break; case CRYPTO_DATA_MBLK: if ((rv = crypto_mblk_data(input, buf, input->cd_length, COPY_FROM_DATA, NULL, NULL)) != CRYPTO_SUCCESS) return (rv); *dptr = buf; break; default: return (CRYPTO_ARGUMENTS_BAD); } return (CRYPTO_SUCCESS); }