Linux 如何编写openssl引擎

Linux 如何编写openssl引擎,linux,openssl,Linux,Openssl,我想写一个openssl动态引擎,但我找不到任何文档 我想写的算法是一个chipper算法(比如rsa)和一个hash算法(比如md5) 是否有任何简单的引擎源代码可以更改并从此使用?我建议您这样做 apt-get source openssl 这将为您提供openssl源代码。在树中,您可以找到例如crypto/rsa和crypto/md5目录,我想这将是您项目的良好开端。 它还附带一些自述等形式的文档 玩得开心 是否有任何简单的引擎源代码可供我更改并使用 英特尔RDRAND引擎非常容易理解

我想写一个openssl动态引擎,但我找不到任何文档

我想写的算法是一个chipper算法(比如rsa)和一个hash算法(比如md5)

是否有任何简单的引擎源代码可以更改并从此使用?

我建议您这样做

apt-get source openssl
这将为您提供openssl源代码。在树中,您可以找到例如crypto/rsa和crypto/md5目录,我想这将是您项目的良好开端。 它还附带一些自述等形式的文档

玩得开心

是否有任何简单的引擎源代码可供我更改并使用

英特尔
RDRAND
引擎非常容易理解。您可以通过以下方式找到其来源:

openssl-1.0.1f$ grep -R -i ENGINE_rdrand *
crypto/engine/eng_rdrand.c:static ENGINE *ENGINE_rdrand(void)
crypto/engine/eng_rdrand.c:    ENGINE *toadd = ENGINE_rdrand();
以下是如何加载并将其设置为默认随机数生成器引擎(从):


我可以在动态引擎模式下使用它们吗?在我看来是这样的。看看README.ENGINE。它说:此外,到外部引擎实现的动态绑定现在由一个名为“dynamic”的特殊引擎提供。请参阅下面的“动态引擎”部分了解详细信息。好的,我明白了。但是如何用动态引擎来编写引擎负载。是否有要编译和加载以测试的示例引擎?虽然很晚,但可能与其他人相关:。对于所有搜索者,现在可以在OpenSSL Wiki上找到一个更好的示例,并附上源代码:祝你好运。
unsigned long err = 0;
int rc = 0;

OPENSSL_cpuid_setup();
ENGINE_load_rdrand();

ENGINE* eng = ENGINE_by_id("rdrand");
err = ERR_get_error();

if(NULL == eng) {
    fprintf(stderr, "ENGINE_load_rdrand failed, err = 0x%lx\n", err);
    abort(); /* failed */
}

rc = ENGINE_init(eng);
err = ERR_get_error();

if(0 == rc) {
    fprintf(stderr, "ENGINE_init failed, err = 0x%lx\n", err);
    abort(); /* failed */
}

rc = ENGINE_set_default(eng, ENGINE_METHOD_RAND);
err = ERR_get_error();

if(0 == rc) {
    fprintf(stderr, "ENGINE_set_default failed, err = 0x%lx\n", err);
    abort(); /* failed */
}

/* OK to proceed */

...
ENGINE_finish(eng);
ENGINE_free(eng);