static int bind_devcrypto(ENGINE *e) { if (!ENGINE_set_id(e, engine_devcrypto_id) || !ENGINE_set_name(e, "/dev/crypto engine") || !ENGINE_set_destroy_function(e, devcrypto_unload) || !ENGINE_set_cmd_defns(e, devcrypto_cmds) || !ENGINE_set_ctrl_function(e, devcrypto_ctrl)) return 0; prepare_cipher_methods(); #ifdef IMPLEMENT_DIGEST prepare_digest_methods(); #endif return (ENGINE_set_ciphers(e, devcrypto_ciphers) #ifdef IMPLEMENT_DIGEST && ENGINE_set_digests(e, devcrypto_digests) #endif /* * Asymmetric ciphers aren't well supported with /dev/crypto. Among the BSD * implementations, it seems to only exist in FreeBSD, and regarding the * parameters in its crypt_kop, the manual crypto(4) has this to say: * * The semantics of these arguments are currently undocumented. * * Reading through the FreeBSD source code doesn't give much more than * their CRK_MOD_EXP implementation for ubsec. * * It doesn't look much better with cryptodev-linux. They have the crypt_kop * structure as well as the command (CRK_*) in cryptodev.h, but no support * seems to be implemented at all for the moment. * * At the time of writing, it seems impossible to write proper support for * FreeBSD's asym features without some very deep knowledge and access to * specific kernel modules. * * /Richard Levitte, 2017-05-11 */ #if 0 # ifndef OPENSSL_NO_RSA && ENGINE_set_RSA(e, devcrypto_rsa) # endif # ifndef OPENSSL_NO_DSA && ENGINE_set_DSA(e, devcrypto_dsa) # endif # ifndef OPENSSL_NO_DH && ENGINE_set_DH(e, devcrypto_dh) # endif # ifndef OPENSSL_NO_EC && ENGINE_set_EC(e, devcrypto_ec) # endif #endif ); }
/* * This engine is always built into libcrypto, so it doesn't offer any * ability to be dynamically loadable. */ void engine_load_devcrypto_int() { ENGINE *e = NULL; if (access("/dev/crypto", R_OK | W_OK) < 0) { fprintf(stderr, "/dev/crypto not present, not enabling devcrypto engine\n"); return; } prepare_cipher_methods(); #if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) prepare_digest_methods(); #endif if ((e = ENGINE_new()) == NULL) return; if (!ENGINE_set_id(e, "devcrypto") || !ENGINE_set_name(e, "/dev/crypto engine") || !ENGINE_set_destroy_function(e, devcrypto_unload) /* * Asymmetric ciphers aren't well supported with /dev/crypto. Among the BSD * implementations, it seems to only exist in FreeBSD, and regarding the * parameters in its crypt_kop, the manual crypto(4) has this to say: * * The semantics of these arguments are currently undocumented. * * Reading through the FreeBSD source code doesn't give much more than * their CRK_MOD_EXP implementation for ubsec. * * It doesn't look much better with cryptodev-linux. They have the crypt_kop * structure as well as the command (CRK_*) in cryptodev.h, but no support * seems to be implemented at all for the moment. * * At the time of writing, it seems impossible to write proper support for * FreeBSD's asym features without some very deep knowledge and access to * specific kernel modules. * * /Richard Levitte, 2017-05-11 */ #if 0 # ifndef OPENSSL_NO_RSA || !ENGINE_set_RSA(e, devcrypto_rsa) # endif # ifndef OPENSSL_NO_DSA || !ENGINE_set_DSA(e, devcrypto_dsa) # endif # ifndef OPENSSL_NO_DH || !ENGINE_set_DH(e, devcrypto_dh) # endif # ifndef OPENSSL_NO_EC || !ENGINE_set_EC(e, devcrypto_ec) # endif #endif || !ENGINE_set_ciphers(e, devcrypto_ciphers) #if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) || !ENGINE_set_digests(e, devcrypto_digests) #endif ) { ENGINE_free(e); return; } ENGINE_add(e); ENGINE_free(e); /* Loose our local reference */ ERR_clear_error(); }