#else
#include "../evp/evp_locl.h"
#endif
+#include <openssl/conf.h>
#ifndef OPENSSL_OPENBSD_DEV_CRYPTO
static const char dev_crypto_id[] = "openbsd_dev_crypto";
static const char dev_crypto_name[] = "OpenBSD /dev/crypto";
+static long allow_misaligned;
+
+#define DEV_CRYPTO_CMD_ALLOW_MISALIGNED ENGINE_CMD_BASE
+static const ENGINE_CMD_DEFN dev_crypto_cmd_defns[]=
+ {
+ { DEV_CRYPTO_CMD_ALLOW_MISALIGNED,
+ "allow_misaligned",
+ "Permit misaligned data to be used",
+ ENGINE_CMD_FLAG_NUMERIC },
+ { 0, NULL, NULL, 0 }
+ };
+
+static int dev_crypto_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
+ {
+ switch(cmd)
+ {
+ case DEV_CRYPTO_CMD_ALLOW_MISALIGNED:
+ allow_misaligned=i;
+ printf("allow misaligned=%ld\n",allow_misaligned);
+ break;
+ }
+
+ return 1;
+ }
+
static ENGINE *engine_openbsd_dev_crypto(void)
{
ENGINE *engine=ENGINE_new();
if(!ENGINE_set_id(engine, dev_crypto_id) ||
- !ENGINE_set_name(engine, dev_crypto_name) ||
- !ENGINE_set_ciphers(engine, dev_crypto_ciphers) ||
- !ENGINE_set_digests(engine, dev_crypto_digests))
+ !ENGINE_set_name(engine, dev_crypto_name) ||
+ !ENGINE_set_ciphers(engine, dev_crypto_ciphers) ||
+ !ENGINE_set_digests(engine, dev_crypto_digests) ||
+ !ENGINE_set_ctrl_function(engine, dev_crypto_ctrl) ||
+ !ENGINE_set_cmd_defns(engine, dev_crypto_cmd_defns))
{
ENGINE_free(engine);
return NULL;
cryp.op=COP_ENCRYPT;/* required to do the MAC rather than check it */
cryp.len=len;
cryp.src=(caddr_t)data;
- cryp.dst=(caddr_t)data; // FIXME!!!
+ cryp.dst=(caddr_t)data; /* FIXME!!! */
cryp.mac=(caddr_t)md;
if(ioctl(fd, CIOCCRYPT, &cryp) == -1)
{
- if(errno == EINVAL) /* buffer is misaligned */
+ if(errno == EINVAL && allow_misaligned) /* buffer is misaligned */
{
char *dcopy;
dcopy=OPENSSL_malloc(len);
memcpy(dcopy,data,len);
cryp.src=dcopy;
- cryp.dst=cryp.src; // FIXME!!!
+ cryp.dst=cryp.src; /* FIXME!!! */
if(ioctl(fd, CIOCCRYPT, &cryp) == -1)
{
return 0;
}
}
- // printf("done\n");
+ /* printf("done\n"); */
return 1;
}
const MD_DATA *from_md=from->md_data;
MD_DATA *to_md=to->md_data;
- // How do we copy sessions?
+ /* How do we copy sessions? */
assert(from->digest->flags&EVP_MD_FLAG_ONESHOT);
to_md->data=OPENSSL_malloc(from_md->len);
NID_md5,
NID_md5WithRSAEncryption,
MD5_DIGEST_LENGTH,
- EVP_MD_FLAG_ONESHOT, // XXX: set according to device info...
+ EVP_MD_FLAG_ONESHOT, /* XXX: set according to device info... */
dev_crypto_md5_init,
dev_crypto_md5_update,
dev_crypto_md5_final,