Extract PKCS#5 handling from pkcs8 plugin to separate helper class
[strongswan.git] / src / libstrongswan / crypto / pkcs5.h
1 /*
2 * Copyright (C) 2013 Tobias Brunner
3 * 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 /**
17 * @defgroup pkcs5 pkcs5
18 * @{ @ingroup crypto
19 */
20
21 #ifndef PKCS5_H_
22 #define PKCS5_H_
23
24 typedef struct pkcs5_t pkcs5_t;
25
26 #include <utils/chunk.h>
27
28 /**
29 * PKCS#5 helper class
30 */
31 struct pkcs5_t {
32
33 /**
34 * Decrypt the given data using the given password and the scheme derived
35 * from the initial AlgorithmIdentifier object.
36 *
37 * @param password password used for decryption
38 * @param data data to decrypt
39 * @param decrypted decrypted data gets allocated
40 * @return TRUE on success, FALSE otherwise
41 */
42 bool (*decrypt)(pkcs5_t *this, chunk_t password, chunk_t data,
43 chunk_t *decrypted) __attribute__((warn_unused_result));
44
45 /**
46 * Destroy the object and any associated cryptographic primitive.
47 */
48 void (*destroy)(pkcs5_t *this);
49 };
50
51 /**
52 * Create a PKCS#5 helper object from an ASN.1 encoded AlgorithmIdentifier
53 * object.
54 *
55 * @param blob ASN.1 encoded AlgorithmIdentifier
56 * @param level0 ASN.1 parser level
57 * @return pkcs5_t object, NULL on failure
58 */
59 pkcs5_t *pkcs5_from_algorithmIdentifier(chunk_t blob, int level0);
60
61 #endif /** PKCS5_H_ @}*/