|
@@ -1,7 +1,7 @@
|
|
|
/*
|
|
|
* AMD Cryptographic Coprocessor (CCP) AES crypto API support
|
|
|
*
|
|
|
- * Copyright (C) 2013 Advanced Micro Devices, Inc.
|
|
|
+ * Copyright (C) 2013,2016 Advanced Micro Devices, Inc.
|
|
|
*
|
|
|
* Author: Tom Lendacky <thomas.lendacky@amd.com>
|
|
|
*
|
|
@@ -259,6 +259,7 @@ static struct crypto_alg ccp_aes_rfc3686_defaults = {
|
|
|
|
|
|
struct ccp_aes_def {
|
|
|
enum ccp_aes_mode mode;
|
|
|
+ unsigned int version;
|
|
|
const char *name;
|
|
|
const char *driver_name;
|
|
|
unsigned int blocksize;
|
|
@@ -269,6 +270,7 @@ struct ccp_aes_def {
|
|
|
static struct ccp_aes_def aes_algs[] = {
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_ECB,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "ecb(aes)",
|
|
|
.driver_name = "ecb-aes-ccp",
|
|
|
.blocksize = AES_BLOCK_SIZE,
|
|
@@ -277,6 +279,7 @@ static struct ccp_aes_def aes_algs[] = {
|
|
|
},
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_CBC,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "cbc(aes)",
|
|
|
.driver_name = "cbc-aes-ccp",
|
|
|
.blocksize = AES_BLOCK_SIZE,
|
|
@@ -285,6 +288,7 @@ static struct ccp_aes_def aes_algs[] = {
|
|
|
},
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_CFB,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "cfb(aes)",
|
|
|
.driver_name = "cfb-aes-ccp",
|
|
|
.blocksize = AES_BLOCK_SIZE,
|
|
@@ -293,6 +297,7 @@ static struct ccp_aes_def aes_algs[] = {
|
|
|
},
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_OFB,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "ofb(aes)",
|
|
|
.driver_name = "ofb-aes-ccp",
|
|
|
.blocksize = 1,
|
|
@@ -301,6 +306,7 @@ static struct ccp_aes_def aes_algs[] = {
|
|
|
},
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_CTR,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "ctr(aes)",
|
|
|
.driver_name = "ctr-aes-ccp",
|
|
|
.blocksize = 1,
|
|
@@ -309,6 +315,7 @@ static struct ccp_aes_def aes_algs[] = {
|
|
|
},
|
|
|
{
|
|
|
.mode = CCP_AES_MODE_CTR,
|
|
|
+ .version = CCP_VERSION(3, 0),
|
|
|
.name = "rfc3686(ctr(aes))",
|
|
|
.driver_name = "rfc3686-ctr-aes-ccp",
|
|
|
.blocksize = 1,
|
|
@@ -357,8 +364,11 @@ static int ccp_register_aes_alg(struct list_head *head,
|
|
|
int ccp_register_aes_algs(struct list_head *head)
|
|
|
{
|
|
|
int i, ret;
|
|
|
+ unsigned int ccpversion = ccp_version();
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(aes_algs); i++) {
|
|
|
+ if (aes_algs[i].version > ccpversion)
|
|
|
+ continue;
|
|
|
ret = ccp_register_aes_alg(head, &aes_algs[i]);
|
|
|
if (ret)
|
|
|
return ret;
|