16f9291ceSJung-uk Kim /*
2b077aed3SPierre Pronchery  * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
374664626SKris Kennaway  *
4b077aed3SPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
874664626SKris Kennaway  */
974664626SKris Kennaway 
1074664626SKris Kennaway #include <stdio.h>
11e71b7053SJung-uk Kim #include "internal/cryptlib.h"
1274664626SKris Kennaway #include <openssl/pkcs12.h>
13b077aed3SPierre Pronchery #include "crypto/pkcs7.h"
1417f01e99SJung-uk Kim #include "p12_local.h"
1574664626SKris Kennaway 
1674664626SKris Kennaway /* Initialise a PKCS12 structure to take data */
1774664626SKris Kennaway 
PKCS12_init_ex(int mode,OSSL_LIB_CTX * ctx,const char * propq)18b077aed3SPierre Pronchery PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq)
1974664626SKris Kennaway {
2074664626SKris Kennaway     PKCS12 *pkcs12;
21e71b7053SJung-uk Kim 
22e71b7053SJung-uk Kim     if ((pkcs12 = PKCS12_new()) == NULL) {
23b077aed3SPierre Pronchery         ERR_raise(ERR_LIB_PKCS12, ERR_R_MALLOC_FAILURE);
2474664626SKris Kennaway         return NULL;
2574664626SKris Kennaway     }
26e71b7053SJung-uk Kim     if (!ASN1_INTEGER_set(pkcs12->version, 3))
27e71b7053SJung-uk Kim         goto err;
2874664626SKris Kennaway     pkcs12->authsafes->type = OBJ_nid2obj(mode);
29b077aed3SPierre Pronchery 
30b077aed3SPierre Pronchery     ossl_pkcs7_set0_libctx(pkcs12->authsafes, ctx);
31b077aed3SPierre Pronchery     if (!ossl_pkcs7_set1_propq(pkcs12->authsafes, propq)) {
32b077aed3SPierre Pronchery         ERR_raise(ERR_LIB_PKCS12, ERR_R_MALLOC_FAILURE);
33b077aed3SPierre Pronchery         goto err;
34b077aed3SPierre Pronchery     }
35b077aed3SPierre Pronchery 
3674664626SKris Kennaway     switch (mode) {
3774664626SKris Kennaway     case NID_pkcs7_data:
38e71b7053SJung-uk Kim         if ((pkcs12->authsafes->d.data = ASN1_OCTET_STRING_new()) == NULL) {
39b077aed3SPierre Pronchery             ERR_raise(ERR_LIB_PKCS12, ERR_R_MALLOC_FAILURE);
403b4e3dcbSSimon L. B. Nielsen             goto err;
4174664626SKris Kennaway         }
4274664626SKris Kennaway         break;
4374664626SKris Kennaway     default:
44b077aed3SPierre Pronchery         ERR_raise(ERR_LIB_PKCS12, PKCS12_R_UNSUPPORTED_PKCS12_MODE);
453b4e3dcbSSimon L. B. Nielsen         goto err;
4674664626SKris Kennaway     }
4774664626SKris Kennaway     return pkcs12;
48e71b7053SJung-uk Kim 
493b4e3dcbSSimon L. B. Nielsen  err:
506f9291ceSJung-uk Kim     PKCS12_free(pkcs12);
513b4e3dcbSSimon L. B. Nielsen     return NULL;
5274664626SKris Kennaway }
53b077aed3SPierre Pronchery 
PKCS12_init(int mode)54b077aed3SPierre Pronchery PKCS12 *PKCS12_init(int mode)
55b077aed3SPierre Pronchery {
56b077aed3SPierre Pronchery     return PKCS12_init_ex(mode, NULL, NULL);
57b077aed3SPierre Pronchery }
58b077aed3SPierre Pronchery 
59