aesni: Provide a plugin stub for AES-NI instruction based crypto primitives

This commit is contained in:
Martin Willi 2015-03-25 13:27:39 +01:00
parent 1ef6c0ef06
commit 78c04b5d4d
5 changed files with 152 additions and 0 deletions

View File

@ -144,6 +144,7 @@ ARG_ENABL_SET([padlock], [enables VIA Padlock crypto plugin.])
ARG_DISBL_SET([random], [disable RNG implementation on top of /dev/(u)random.])
ARG_DISBL_SET([rc2], [disable RC2 software implementation plugin.])
ARG_ENABL_SET([rdrand], [enable Intel RDRAND random generator plugin.])
ARG_ENABL_SET([aesni], [enable Intel AES-NI crypto plugin.])
ARG_DISBL_SET([sha1], [disable SHA1 software implementation plugin.])
ARG_DISBL_SET([sha2], [disable SHA256/SHA384/SHA512 software implementation plugin.])
ARG_DISBL_SET([xcbc], [disable xcbc crypto implementation plugin.])
@ -1243,6 +1244,7 @@ ADD_PLUGIN([test-vectors], [s charon scepclient pki])
ADD_PLUGIN([unbound], [s charon scripts])
ADD_PLUGIN([ldap], [s charon scepclient scripts nm cmd])
ADD_PLUGIN([pkcs11], [s charon pki nm cmd])
ADD_PLUGIN([aesni], [s charon scepclient pki scripts medsrv attest nm cmd aikgen])
ADD_PLUGIN([aes], [s charon scepclient pki scripts nm cmd])
ADD_PLUGIN([des], [s charon scepclient pki scripts nm cmd])
ADD_PLUGIN([blowfish], [s charon scepclient pki scripts nm cmd])
@ -1406,6 +1408,7 @@ AM_CONDITIONAL(USE_SHA2, test x$sha2 = xtrue)
AM_CONDITIONAL(USE_FIPS_PRF, test x$fips_prf = xtrue)
AM_CONDITIONAL(USE_GMP, test x$gmp = xtrue)
AM_CONDITIONAL(USE_RDRAND, test x$rdrand = xtrue)
AM_CONDITIONAL(USE_AESNI, test x$aesni = xtrue)
AM_CONDITIONAL(USE_RANDOM, test x$random = xtrue)
AM_CONDITIONAL(USE_NONCE, test x$nonce = xtrue)
AM_CONDITIONAL(USE_X509, test x$x509 = xtrue)
@ -1649,6 +1652,7 @@ AC_CONFIG_FILES([
src/libstrongswan/plugins/fips_prf/Makefile
src/libstrongswan/plugins/gmp/Makefile
src/libstrongswan/plugins/rdrand/Makefile
src/libstrongswan/plugins/aesni/Makefile
src/libstrongswan/plugins/random/Makefile
src/libstrongswan/plugins/nonce/Makefile
src/libstrongswan/plugins/hmac/Makefile

View File

@ -296,6 +296,13 @@ if MONOLITHIC
endif
endif
if USE_AESNI
SUBDIRS += plugins/aesni
if MONOLITHIC
libstrongswan_la_LIBADD += plugins/aesni/libstrongswan-aesni.la
endif
endif
if USE_RANDOM
SUBDIRS += plugins/random
if MONOLITHIC

View File

@ -0,0 +1,16 @@
AM_CPPFLAGS = \
-I$(top_srcdir)/src/libstrongswan
AM_CFLAGS = \
$(PLUGIN_CFLAGS)
if MONOLITHIC
noinst_LTLIBRARIES = libstrongswan-aesni.la
else
plugin_LTLIBRARIES = libstrongswan-aesni.la
endif
libstrongswan_aesni_la_SOURCES = \
aesni_plugin.h aesni_plugin.c
libstrongswan_aesni_la_LDFLAGS = -module -avoid-version

View File

@ -0,0 +1,83 @@
/*
* Copyright (C) 2015 Martin Willi
* Copyright (C) 2015 revosec AG
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
#include "aesni_plugin.h"
#include <stdio.h>
#include <library.h>
#include <utils/debug.h>
#include <utils/cpu_feature.h>
typedef struct private_aesni_plugin_t private_aesni_plugin_t;
typedef enum cpuid_feature_t cpuid_feature_t;
/**
* private data of aesni_plugin
*/
struct private_aesni_plugin_t {
/**
* public functions
*/
aesni_plugin_t public;
};
METHOD(plugin_t, get_name, char*,
private_aesni_plugin_t *this)
{
return "aesni";
}
METHOD(plugin_t, get_features, int,
private_aesni_plugin_t *this, plugin_feature_t *features[])
{
static plugin_feature_t f[] = {
};
*features = f;
if (cpu_feature_available(CPU_FEATURE_AESNI))
{
return countof(f);
}
return 0;
}
METHOD(plugin_t, destroy, void,
private_aesni_plugin_t *this)
{
free(this);
}
/*
* see header file
*/
plugin_t *aesni_plugin_create()
{
private_aesni_plugin_t *this;
INIT(this,
.public = {
.plugin = {
.get_name = _get_name,
.get_features = _get_features,
.reload = (void*)return_false,
.destroy = _destroy,
},
},
);
return &this->public.plugin;
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (C) 2015 Martin Willi
* Copyright (C) 2015 revosec AG
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
/**
* @defgroup aesni_p aesni
* @ingroup plugins
*
* @defgroup aesni_plugin aesni_plugin
* @{ @ingroup aesni_p
*/
#ifndef AESNI_PLUGIN_H_
#define AESNI_PLUGIN_H_
#include <plugins/plugin.h>
typedef struct aesni_plugin_t aesni_plugin_t;
/**
* Plugin providing crypto primitives based on Intel AES-NI instructions.
*/
struct aesni_plugin_t {
/**
* implements plugin interface
*/
plugin_t plugin;
};
#endif /** AESNI_PLUGIN_H_ @}*/