diff -r 000000000000 -r e35f40988205 xmlsecurityengine/xmlseccrypto/inc/xmlsecc_evpwrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmlsecurityengine/xmlseccrypto/inc/xmlsecc_evpwrapper.h Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,193 @@ +/* +* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Methods that allows to sign and verify data. +* +*/ + + +/* A wrapper for evp.h in openssl */ + +#ifndef __SYMBIANCRYPTO_EVP_WRAPPER_H__ +#define __SYMBIANCRYPTO_EVP_WRAPPER_H__ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +#include "xmlsecc_config.h" +#include "xmlsecc_bio.h" + + +/************************************ + * + * RSA Sign functions + * + ************************************/ + +/* data type compatibility for OpenSSL*/ + +#define HASKEY 1 +#define NOKEY 0 + +/** + * Key algorithms. + * EVP_PKEY_UNKNOWN unknown algorithm + * EVP_PKEY_RSA RSA algorithm + * EVP_PKEY_DSA DSA algorithm + */ +enum sc_key_algos +{ + EVP_PKEY_UNKNOWN=0, + EVP_PKEY_RSA, + EVP_PKEY_DSA +}; + +struct ScKeyStore; +typedef struct ScKeyStore ScKeyStore, *ScKeyStorePtr; +typedef unsigned char* RSA; + +typedef struct ScPkey +{ + int type; + int load; // HASKEY - 1, NOKEY - 0 + unsigned int bitsize; // Bit size of the key + int duplicate; // Indicate whether this is a duplicate copy + char *name; + ScKeyStorePtr keyStore; +} EVP_PKEY; + + +/** + * Create a new key store structure + * + * @param keytype type of the key + * @param keyname name of the key + * @return EVP_PKEY structure + */ +EVP_PKEY *sc_pkey_new(int keytype, char *keyname); + +/** + * Symbian key store Initialization + * + * @return 0 if correct initialization + * @return error code in the other hand + */ +int sc_pkey_init(); + +/** + * Load an RSA key + * + * @param pkey EVP_PKEY structure + * @return 0 if key is loaded + * @return -1 if key is not loaded + * @return error code in the other hand + */ +int sc_pkey_load(EVP_PKEY *pkey); + +/** + * Generate an RSA key + * + * @param pkey EVP_KEY structure + * @param sizeBits size of the key + * @return 0 if key is loaded + * @return -1 if key is not loaded + * @return error code in the other hand + */ +int sc_pkey_generate(EVP_PKEY *pkey, unsigned int sizeBits); + +/** + * Free the EVP_PKEY structure + */ +void sc_pkey_free(EVP_PKEY *pkey); + +/** + * Duplicate an EVP key + * + * @param pkey EVP_KEY structure + * @return EVP_PKEY duplicated structure + */ +EVP_PKEY *sc_pkey_duplicate(EVP_PKEY *aPKey); + +/** + * Symbian key store shutdown process + */ +void sc_pkey_shutdown(); + +/** + * Get the pkey size + * + * @param pkey EVP_KEY structure + * @return size of the key + */ +unsigned int sc_pkey_size(EVP_PKEY *aPKey); + +/** + * Read the private key from ASN.1 DER encoded PKCS#8 format + * + * @param aBio BIO structure + * @param aPwdCallback callback + * @param aPwdCallbackCtx callback context + * @return EVP_PKEY structure + */ +EVP_PKEY* d2i_PKCS8PrivateKey_bio(BIO *aBio, void *aPwdCallback, void *aPwdCallbackCtx); + +/** + * Read the private key from Unified Key Store + * + * @param keyname name of the key + * @return EVP_PKEY structure + */ +EVP_PKEY* d2i_PKCS8PrivateKey(char *keyname); + +/** + * Read the public key from ASN.1 DER encoded format + * + * @param aBio BIO structure + * @return EVP_PKEY structure + */ +EVP_PKEY* d2i_PUBKEY_bio(BIO *aBio); + +#ifndef XMLSEC_NO_X509 + +/************************************ + * + * X.509 related functions + * + ************************************/ + +typedef struct ScX509St +{ + char* der; // Certificate in ASN.1 DER format + unsigned int derlen; + +} X509; + +/** + * Set the public key info + * + * @param pkey EVP_KEY structure + * @param aCert X509 structure + * @return 0 if operation correct + * @return error code if operation fail + */ +int sc_pkey_setPublic(EVP_PKEY* aPKey, X509 *aCert); + +#endif // XMLSEC_NO_X509 + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __SYMBIANCRYPTO_EVP_WRAPPER_H__ */ + +#define __SYMBIANCRYPTO_EVP_WRAPPER_H__