16f9291ceSJung-uk Kim /*
2*b077aed3SPierre Pronchery * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
374664626SKris Kennaway *
4*b077aed3SPierre 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>
13*b077aed3SPierre 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)18*b077aed3SPierre 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) {
23*b077aed3SPierre 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);
29*b077aed3SPierre Pronchery
30*b077aed3SPierre Pronchery ossl_pkcs7_set0_libctx(pkcs12->authsafes, ctx);
31*b077aed3SPierre Pronchery if (!ossl_pkcs7_set1_propq(pkcs12->authsafes, propq)) {
32*b077aed3SPierre Pronchery ERR_raise(ERR_LIB_PKCS12, ERR_R_MALLOC_FAILURE);
33*b077aed3SPierre Pronchery goto err;
34*b077aed3SPierre Pronchery }
35*b077aed3SPierre Pronchery
3674664626SKris Kennaway switch (mode) {
3774664626SKris Kennaway case NID_pkcs7_data:
38e71b7053SJung-uk Kim if ((pkcs12->authsafes->d.data = ASN1_OCTET_STRING_new()) == NULL) {
39*b077aed3SPierre Pronchery ERR_raise(ERR_LIB_PKCS12, ERR_R_MALLOC_FAILURE);
403b4e3dcbSSimon L. B. Nielsen goto err;
4174664626SKris Kennaway }
4274664626SKris Kennaway break;
4374664626SKris Kennaway default:
44*b077aed3SPierre 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 }
53*b077aed3SPierre Pronchery
PKCS12_init(int mode)54*b077aed3SPierre Pronchery PKCS12 *PKCS12_init(int mode)
55*b077aed3SPierre Pronchery {
56*b077aed3SPierre Pronchery return PKCS12_init_ex(mode, NULL, NULL);
57*b077aed3SPierre Pronchery }
58*b077aed3SPierre Pronchery
59