Python: 3.9.16 OpenSSL: 3.0.8
fips_ccode.c
#include <stdio.h>
#include <stdlib.h>
#include <openssl/provider.h>
#include "openssl/md5.h"
int main(void)
{
OSSL_PROVIDER* fips;
OSSL_PROVIDER* base;
const char* default_search_path = "/tmp/fips_files/";
OSSL_PROVIDER_set_default_search_path(NULL, default_search_path);
int load_config = OSSL_LIB_CTX_load_config(NULL, "/tmp/fips_files/openssl.cnf") ;
printf("loading config:%d\n", load_config);
fips = OSSL_PROVIDER_load(NULL, "fips");
printf("value:%x\n",fips);
printf("Success to load FIPS provider\n");
base = OSSL_PROVIDER_load(NULL, "base");
printf("Success to load base provider\n");
}
fips_python.py
import ctypes
import os
import ssl
import ssl, os
import hashlib
BASEDIR="/tmp/"
FILENAME="libcrypto.so.3"
def get_crypto_lib_path():
return os.path.join(BASEDIR, FILENAME)
crypto_context = ctypes.CDLL(os.path.join(BASEDIR, get_crypto_lib_path()))
crypto_context.OSSL_PROVIDER_set_default_search_path.argtypes = [ctypes.c_char_p, ctypes.c_wchar_p]
crypto_context.OSSL_PROVIDER_set_default_search_path.restype = ctypes.c_char
crypto_context.OSSL_PROVIDER_set_default_search_path(None, "/tmp/fips_files/")
crypto_context.OSSL_LIB_CTX_load_config.argtypes = [ctypes.c_char_p, ctypes.c_wchar_p]
crypto_context.OSSL_LIB_CTX_load_config.restype = ctypes.c_int
load_config = crypto_context.OSSL_LIB_CTX_load_config(None, "/tmp/fips_files/openssl.cnf")
print("load config:", load_config)
crypto_context.OSSL_PROVIDER_load.argtypes = [ctypes.c_char_p, ctypes.c_wchar_p]
crypto_context.OSSL_PROVIDER_load.restype = ctypes.c_wchar_p
base_load = crypto_context.OSSL_PROVIDER_load(None, "base")
print("base load ret value:", base_load)
crypto_context.OSSL_PROVIDER_load.argtypes = [ctypes.c_char_p, ctypes.c_wchar_p]
crypto_context.OSSL_PROVIDER_load.restype = ctypes.c_wchar_p
fips_load = crypto_context.OSSL_PROVIDER_load(None, "fips")
print("fips load ret value:", fips_load)
Here I am seeing issue in loading the provider "fips" and "base" using "OSSL_PROVIDER_load" function in python using ctypes. What is the proper way to load the c function here? are the arguments type used correct?