Specifications

Red Hat Enterprise Linux to Oracle Solaris Porting Guide
65
A kernel cryptographic framework for kernel-level modules
Note that consumers that are connected to the framework need not have any specific knowledge of the
installed cryptographic mechanisms. Similarly, providers can be plugged into the framework and can
support different types of consumers. You do not have to write consumer-specific code in the
providers.
Encryption Algorithms, Mechanisms, and Their Mapping
The Oracle Solaris cryptographic framework provides cryptographic services to users and applications
through individual commands, user-level and kernel-level frameworks, and user and kernel
programming interfaces. The cryptographic framework provides these cryptographic services to
applications and kernel modules in a manner seamless to the end user. End users can also make use of
direct cryptographic services, such as encryption and decryption of files.
With the availability of an onboard crypto accelerator on Oracle’s SPARC T4 chip, all applications
written to use the cryptographic framework can take advantage of this new hardware crypto accelerator
without doing any additional work.
The following table lists the differences in function calls on the two platforms.
TABLE 7-1. API AND IMPLEMENTATION DIFFERENCES
RHEL ORACLE SOLARIS 11
MD4
unsigned char *MD4(const unsigned char *d,
unsigned long n, unsigned char *md);
int MD4_Init(MD4_CTX *c); void MD4Init(MD4_CTX *context);
int MD4_Update(MD4_CTX *c, const void *data,
unsigned long len);
void MD4Update(MD4_CTX *context, unsigned char
*input, unsigned int inlen);
int MD4_Final(unsigned char *md, MD4_CTX *c); void MD4Final(unsigned char *output, MD4_CTX
*context);
MD5
unsigned char *MD5(const unsigned char *d,
unsigned long n, unsigned char *md);
void md5_calc(unsigned char *output, unsigned
char *input, unsigned int inlen);
int MD5_Init(MD5_CTX *c); void MD5Init(MD5_CTX *context);
int MD5_Update(MD5_CTX *c, const void *data,
unsigned long len);
void MD5Update(MD5_CTX *context, unsigned char
*input, unsigned int inlen);