Annotation of embedaddon/strongswan/src/libstrongswan/crypto/crypters/crypter.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2005-2006 Martin Willi
! 3: * Copyright (C) 2005 Jan Hutter
! 4: * HSR Hochschule fuer Technik Rapperswil
! 5: *
! 6: * This program is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2 of the License, or (at your
! 9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 10: *
! 11: * This program is distributed in the hope that it will be useful, but
! 12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 14: * for more details.
! 15: */
! 16:
! 17: #include <asn1/oid.h>
! 18:
! 19: #include "crypter.h"
! 20:
! 21: ENUM_BEGIN(encryption_algorithm_names, ENCR_DES_IV64, ENCR_DES_IV32,
! 22: "DES_IV64",
! 23: "DES_CBC",
! 24: "3DES_CBC",
! 25: "RC5_CBC",
! 26: "IDEA_CBC",
! 27: "CAST_CBC",
! 28: "BLOWFISH_CBC",
! 29: "3IDEA",
! 30: "DES_IV32");
! 31: ENUM_NEXT(encryption_algorithm_names, ENCR_NULL, ENCR_AES_CCM_ICV16, ENCR_DES_IV32,
! 32: "NULL",
! 33: "AES_CBC",
! 34: "AES_CTR",
! 35: "AES_CCM_8",
! 36: "AES_CCM_12",
! 37: "AES_CCM_16");
! 38: ENUM_NEXT(encryption_algorithm_names, ENCR_AES_GCM_ICV8, ENCR_NULL_AUTH_AES_GMAC, ENCR_AES_CCM_ICV16,
! 39: "AES_GCM_8",
! 40: "AES_GCM_12",
! 41: "AES_GCM_16",
! 42: "NULL_AES_GMAC");
! 43: ENUM_NEXT(encryption_algorithm_names, ENCR_CAMELLIA_CBC, ENCR_CHACHA20_POLY1305, ENCR_NULL_AUTH_AES_GMAC,
! 44: "CAMELLIA_CBC",
! 45: "CAMELLIA_CTR",
! 46: "CAMELLIA_CCM_8",
! 47: "CAMELLIA_CCM_12",
! 48: "CAMELLIA_CCM_16",
! 49: "CHACHA20_POLY1305");
! 50: ENUM_NEXT(encryption_algorithm_names, ENCR_UNDEFINED, ENCR_AES_ECB, ENCR_CHACHA20_POLY1305,
! 51: "UNDEFINED",
! 52: "DES_ECB",
! 53: "SERPENT_CBC",
! 54: "TWOFISH_CBC",
! 55: "RC2_CBC",
! 56: "AES_ECB");
! 57: ENUM_END(encryption_algorithm_names, ENCR_AES_ECB);
! 58:
! 59: /*
! 60: * Described in header.
! 61: */
! 62: encryption_algorithm_t encryption_algorithm_from_oid(int oid, size_t *key_size)
! 63: {
! 64: encryption_algorithm_t alg;
! 65: size_t alg_key_size;
! 66:
! 67: switch (oid)
! 68: {
! 69: case OID_DES_CBC:
! 70: alg = ENCR_DES;
! 71: alg_key_size = 0;
! 72: break;
! 73: case OID_3DES_EDE_CBC:
! 74: alg = ENCR_3DES;
! 75: alg_key_size = 0;
! 76: break;
! 77: case OID_AES128_CBC:
! 78: alg = ENCR_AES_CBC;
! 79: alg_key_size = 128;
! 80: break;
! 81: case OID_AES192_CBC:
! 82: alg = ENCR_AES_CBC;
! 83: alg_key_size = 192;
! 84: break;
! 85: case OID_AES256_CBC:
! 86: alg = ENCR_AES_CBC;
! 87: alg_key_size = 256;
! 88: break;
! 89: case OID_CAMELLIA128_CBC:
! 90: alg = ENCR_CAMELLIA_CBC;
! 91: alg_key_size = 128;
! 92: break;
! 93: case OID_CAMELLIA192_CBC:
! 94: alg = ENCR_CAMELLIA_CBC;
! 95: alg_key_size = 192;
! 96: break;
! 97: case OID_CAMELLIA256_CBC:
! 98: alg = ENCR_CAMELLIA_CBC;
! 99: alg_key_size = 256;
! 100: break;
! 101: case OID_BLOWFISH_CBC:
! 102: alg = ENCR_BLOWFISH;
! 103: alg_key_size = 0;
! 104: break;
! 105: default:
! 106: alg = ENCR_UNDEFINED;
! 107: alg_key_size = 0;
! 108: }
! 109: if (key_size)
! 110: {
! 111: *key_size = alg_key_size;
! 112: }
! 113: return alg;
! 114: }
! 115:
! 116: /*
! 117: * Described in header.
! 118: */
! 119: int encryption_algorithm_to_oid(encryption_algorithm_t alg, size_t key_size)
! 120: {
! 121: int oid;
! 122:
! 123: switch(alg)
! 124: {
! 125: case ENCR_DES:
! 126: oid = OID_DES_CBC;
! 127: break;
! 128: case ENCR_3DES:
! 129: oid = OID_3DES_EDE_CBC;
! 130: break;
! 131: case ENCR_AES_CBC:
! 132: switch (key_size)
! 133: {
! 134: case 128:
! 135: oid = OID_AES128_CBC;
! 136: break;
! 137: case 192:
! 138: oid = OID_AES192_CBC;
! 139: break;
! 140: case 256:
! 141: oid = OID_AES256_CBC;
! 142: break;
! 143: default:
! 144: oid = OID_UNKNOWN;
! 145: }
! 146: break;
! 147: case ENCR_CAMELLIA_CBC:
! 148: switch (key_size)
! 149: {
! 150: case 128:
! 151: oid = OID_CAMELLIA128_CBC;
! 152: break;
! 153: case 192:
! 154: oid = OID_CAMELLIA192_CBC;
! 155: break;
! 156: case 256:
! 157: oid = OID_CAMELLIA256_CBC;
! 158: break;
! 159: default:
! 160: oid = OID_UNKNOWN;
! 161: }
! 162: break;
! 163: case ENCR_BLOWFISH:
! 164: oid = OID_BLOWFISH_CBC;
! 165: break;
! 166: default:
! 167: oid = OID_UNKNOWN;
! 168: }
! 169: return oid;
! 170: }
! 171:
! 172: /*
! 173: * Described in header.
! 174: */
! 175: bool encryption_algorithm_is_aead(encryption_algorithm_t alg)
! 176: {
! 177: switch (alg)
! 178: {
! 179: case ENCR_AES_CCM_ICV8:
! 180: case ENCR_AES_CCM_ICV12:
! 181: case ENCR_AES_CCM_ICV16:
! 182: case ENCR_AES_GCM_ICV8:
! 183: case ENCR_AES_GCM_ICV12:
! 184: case ENCR_AES_GCM_ICV16:
! 185: case ENCR_NULL_AUTH_AES_GMAC:
! 186: case ENCR_CAMELLIA_CCM_ICV8:
! 187: case ENCR_CAMELLIA_CCM_ICV12:
! 188: case ENCR_CAMELLIA_CCM_ICV16:
! 189: case ENCR_CHACHA20_POLY1305:
! 190: return TRUE;
! 191: default:
! 192: return FALSE;
! 193: }
! 194: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>