如何编写openssl引擎

ham*_*mSh 7 linux openssl

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

我想写的算法是削片机算法(如rsa)和散列算法(如md5).

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

jww*_*jww 2

我可以更改并使用任何简单的引擎源代码吗?

英特尔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();
Run Code Online (Sandbox Code Playgroud)

以下是如何加载并将其设置为默认随机数生成器引擎(来自Random Numbers|Hardware):

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);
Run Code Online (Sandbox Code Playgroud)