135 lines
2.8 KiB
C
135 lines
2.8 KiB
C
/*
|
|
* Copyright (C) 2005-2006 Martin Willi
|
|
* Copyright (C) 2005 Jan Hutter
|
|
* Hochschule fuer Technik Rapperswil
|
|
*
|
|
* 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 <asn1/oid.h>
|
|
|
|
#include "crypter.h"
|
|
|
|
ENUM_BEGIN(encryption_algorithm_names, ENCR_DES_IV64, ENCR_DES_IV32,
|
|
"DES_IV64",
|
|
"DES",
|
|
"3DES",
|
|
"RC5",
|
|
"IDEA",
|
|
"CAST",
|
|
"BLOWFISH",
|
|
"3IDEA",
|
|
"DES_IV32");
|
|
ENUM_NEXT(encryption_algorithm_names, ENCR_NULL, ENCR_AES_CCM_ICV16, ENCR_DES_IV32,
|
|
"NULL",
|
|
"AES_CBC",
|
|
"AES_CTR",
|
|
"AES_CCM_8",
|
|
"AES_CCM_12",
|
|
"AES_CCM_16");
|
|
ENUM_NEXT(encryption_algorithm_names, ENCR_AES_GCM_ICV8, ENCR_NULL_AUTH_AES_GMAC, ENCR_AES_CCM_ICV16,
|
|
"AES_GCM_8",
|
|
"AES_GCM_12",
|
|
"AES_GCM_16",
|
|
"NULL_AES_GMAC");
|
|
ENUM_NEXT(encryption_algorithm_names, ENCR_CAMELLIA_CBC, ENCR_CAMELLIA_CCM_ICV16, ENCR_NULL_AUTH_AES_GMAC,
|
|
"CAMELLIA_CBC",
|
|
"CAMELLIA_CTR",
|
|
"CAMELLIA_CCM_ICV8",
|
|
"CAMELLIA_CCM_ICV12",
|
|
"CAMELLIA_CCM_ICV16");
|
|
ENUM_NEXT(encryption_algorithm_names, ENCR_UNDEFINED, ENCR_TWOFISH, ENCR_CAMELLIA_CCM_ICV16,
|
|
"UNDEFINED",
|
|
"DES_ECB",
|
|
"SERPENT",
|
|
"TWOFISH");
|
|
ENUM_END(encryption_algorithm_names, ENCR_TWOFISH);
|
|
|
|
/*
|
|
* Described in header.
|
|
*/
|
|
encryption_algorithm_t encryption_algorithm_from_oid(int oid, size_t *key_size)
|
|
{
|
|
encryption_algorithm_t alg;
|
|
size_t alg_key_size;
|
|
|
|
switch (oid)
|
|
{
|
|
case OID_DES_CBC:
|
|
alg = ENCR_DES;
|
|
alg_key_size = 0;
|
|
break;
|
|
case OID_3DES_EDE_CBC:
|
|
alg = ENCR_3DES;
|
|
alg_key_size = 0;
|
|
break;
|
|
case OID_AES128_CBC:
|
|
alg = ENCR_AES_CBC;
|
|
alg_key_size = 128;
|
|
break;
|
|
case OID_AES192_CBC:
|
|
alg = ENCR_AES_CBC;
|
|
alg_key_size = 192;
|
|
break;
|
|
case OID_AES256_CBC:
|
|
alg = ENCR_AES_CBC;
|
|
alg_key_size = 256;
|
|
break;
|
|
default:
|
|
alg = ENCR_UNDEFINED;
|
|
alg_key_size = 0;
|
|
}
|
|
if (key_size)
|
|
{
|
|
*key_size = alg_key_size;
|
|
}
|
|
return alg;
|
|
}
|
|
|
|
/*
|
|
* Described in header.
|
|
*/
|
|
int encryption_algorithm_to_oid(encryption_algorithm_t alg, size_t key_size)
|
|
{
|
|
int oid;
|
|
|
|
switch(alg)
|
|
{
|
|
case ENCR_DES:
|
|
oid = OID_DES_CBC;
|
|
break;
|
|
case ENCR_3DES:
|
|
oid = OID_3DES_EDE_CBC;
|
|
break;
|
|
case ENCR_AES_CBC:
|
|
switch (key_size)
|
|
{
|
|
case 128:
|
|
oid = OID_AES128_CBC;
|
|
break;
|
|
case 192:
|
|
oid = OID_AES192_CBC;
|
|
break;
|
|
case 256:
|
|
oid = OID_AES256_CBC;
|
|
break;
|
|
default:
|
|
oid = OID_UNKNOWN;
|
|
}
|
|
break;
|
|
default:
|
|
oid = OID_UNKNOWN;
|
|
}
|
|
return oid;
|
|
}
|
|
|
|
|