Return to pem_plugin.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / plugins / pem |
1.1 misho 1: /* 2: * Copyright (C) 2009 Martin Willi 3: * HSR Hochschule fuer Technik Rapperswil 4: * 5: * This program is free software; you can redistribute it and/or modify it 6: * under the terms of the GNU General Public License as published by the 7: * Free Software Foundation; either version 2 of the License, or (at your 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. 9: * 10: * This program is distributed in the hope that it will be useful, but 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13: * for more details. 14: */ 15: 16: #include "pem_plugin.h" 17: 18: #include <library.h> 19: 20: #include "pem_builder.h" 21: #include "pem_encoder.h" 22: 23: typedef struct private_pem_plugin_t private_pem_plugin_t; 24: 25: /** 26: * private data of pem_plugin 27: */ 28: struct private_pem_plugin_t { 29: 30: /** 31: * public functions 32: */ 33: pem_plugin_t public; 34: }; 35: 36: METHOD(plugin_t, get_name, char*, 37: private_pem_plugin_t *this) 38: { 39: return "pem"; 40: } 41: 42: METHOD(plugin_t, get_features, int, 43: private_pem_plugin_t *this, plugin_feature_t *features[]) 44: { 45: static plugin_feature_t f[] = { 46: /* private key PEM decoding */ 47: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 48: PLUGIN_PROVIDE(PRIVKEY, KEY_ANY), 49: PLUGIN_DEPENDS(PRIVKEY, KEY_ANY), 50: PLUGIN_SDEPEND(HASHER, HASH_MD5), 51: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 52: PLUGIN_PROVIDE(PRIVKEY, KEY_RSA), 53: PLUGIN_DEPENDS(PRIVKEY, KEY_RSA), 54: PLUGIN_SDEPEND(HASHER, HASH_MD5), 55: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 56: PLUGIN_PROVIDE(PRIVKEY, KEY_ECDSA), 57: PLUGIN_DEPENDS(PRIVKEY, KEY_ECDSA), 58: PLUGIN_SDEPEND(HASHER, HASH_MD5), 59: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 60: PLUGIN_PROVIDE(PRIVKEY, KEY_DSA), 61: PLUGIN_DEPENDS(PRIVKEY, KEY_DSA), 62: PLUGIN_SDEPEND(HASHER, HASH_MD5), 63: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 64: PLUGIN_PROVIDE(PRIVKEY, KEY_BLISS), 65: PLUGIN_DEPENDS(PRIVKEY, KEY_BLISS), 66: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 67: PLUGIN_PROVIDE(PRIVKEY, KEY_ED25519), 68: PLUGIN_DEPENDS(PRIVKEY, KEY_ED25519), 69: PLUGIN_REGISTER(PRIVKEY, pem_private_key_load, FALSE), 70: PLUGIN_PROVIDE(PRIVKEY, KEY_ED448), 71: PLUGIN_DEPENDS(PRIVKEY, KEY_ED448), 72: 73: /* public key PEM decoding */ 74: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 75: PLUGIN_PROVIDE(PUBKEY, KEY_ANY), 76: PLUGIN_DEPENDS(PUBKEY, KEY_ANY), 77: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 78: PLUGIN_PROVIDE(PUBKEY, KEY_RSA), 79: PLUGIN_DEPENDS(PUBKEY, KEY_RSA), 80: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 81: PLUGIN_PROVIDE(PUBKEY, KEY_ECDSA), 82: PLUGIN_DEPENDS(PUBKEY, KEY_ECDSA), 83: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 84: PLUGIN_PROVIDE(PUBKEY, KEY_DSA), 85: PLUGIN_DEPENDS(PUBKEY, KEY_DSA), 86: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 87: PLUGIN_PROVIDE(PUBKEY, KEY_BLISS), 88: PLUGIN_DEPENDS(PUBKEY, KEY_BLISS), 89: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 90: PLUGIN_PROVIDE(PUBKEY, KEY_ED25519), 91: PLUGIN_DEPENDS(PUBKEY, KEY_ED25519), 92: PLUGIN_REGISTER(PUBKEY, pem_public_key_load, FALSE), 93: PLUGIN_PROVIDE(PUBKEY, KEY_ED448), 94: PLUGIN_DEPENDS(PUBKEY, KEY_ED448), 95: 96: /* certificate PEM decoding */ 97: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 98: PLUGIN_PROVIDE(CERT_DECODE, CERT_ANY), 99: PLUGIN_SDEPEND(CERT_DECODE, CERT_X509), 100: PLUGIN_SDEPEND(CERT_DECODE, CERT_GPG), 101: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 102: PLUGIN_PROVIDE(CERT_DECODE, CERT_X509), 103: PLUGIN_DEPENDS(CERT_DECODE, CERT_X509), 104: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 105: PLUGIN_PROVIDE(CERT_DECODE, CERT_X509_CRL), 106: PLUGIN_DEPENDS(CERT_DECODE, CERT_X509_CRL), 107: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 108: PLUGIN_PROVIDE(CERT_DECODE, CERT_X509_OCSP_REQUEST), 109: PLUGIN_DEPENDS(CERT_DECODE, CERT_X509_OCSP_REQUEST), 110: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 111: PLUGIN_PROVIDE(CERT_DECODE, CERT_X509_OCSP_RESPONSE), 112: PLUGIN_DEPENDS(CERT_DECODE, CERT_X509_OCSP_RESPONSE), 113: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 114: PLUGIN_PROVIDE(CERT_DECODE, CERT_X509_AC), 115: PLUGIN_DEPENDS(CERT_DECODE, CERT_X509_AC), 116: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 117: PLUGIN_PROVIDE(CERT_DECODE, CERT_PKCS10_REQUEST), 118: PLUGIN_DEPENDS(CERT_DECODE, CERT_PKCS10_REQUEST), 119: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 120: PLUGIN_PROVIDE(CERT_DECODE, CERT_TRUSTED_PUBKEY), 121: PLUGIN_DEPENDS(CERT_DECODE, CERT_TRUSTED_PUBKEY), 122: PLUGIN_REGISTER(CERT_DECODE, pem_certificate_load, FALSE), 123: PLUGIN_PROVIDE(CERT_DECODE, CERT_GPG), 124: PLUGIN_DEPENDS(CERT_DECODE, CERT_GPG), 125: 126: /* container PEM decoding */ 127: PLUGIN_REGISTER(CONTAINER_DECODE, pem_container_load, FALSE), 128: PLUGIN_PROVIDE(CONTAINER_DECODE, CONTAINER_PKCS12), 129: PLUGIN_DEPENDS(CONTAINER_DECODE, CONTAINER_PKCS12), 130: }; 131: *features = f; 132: return countof(f); 133: } 134: 135: METHOD(plugin_t, destroy, void, 136: private_pem_plugin_t *this) 137: { 138: lib->encoding->remove_encoder(lib->encoding, pem_encoder_encode); 139: 140: free(this); 141: } 142: 143: /* 144: * see header file 145: */ 146: plugin_t *pem_plugin_create() 147: { 148: private_pem_plugin_t *this; 149: 150: INIT(this, 151: .public = { 152: .plugin = { 153: .get_name = _get_name, 154: .get_features = _get_features, 155: .destroy = _destroy, 156: }, 157: }, 158: ); 159: 160: /* register PEM encoder */ 161: lib->encoding->add_encoder(lib->encoding, pem_encoder_encode); 162: 163: return &this->public.plugin; 164: } 165: