1 | /* |
---|---|
2 | * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. |
3 | * |
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
5 | * this file except in compliance with the License. You can obtain a copy |
6 | * in the file LICENSE in the source distribution or at |
7 | * https://www.openssl.org/source/license.html |
8 | */ |
9 | |
10 | #include <stdio.h> |
11 | #include "internal/cryptlib.h" |
12 | #include <openssl/pkcs12.h> |
13 | #include "p12_local.h" |
14 | |
15 | /* Initialise a PKCS12 structure to take data */ |
16 | |
17 | PKCS12 *PKCS12_init(int mode) |
18 | { |
19 | PKCS12 *pkcs12; |
20 | |
21 | if ((pkcs12 = PKCS12_new()) == NULL) { |
22 | PKCS12err(PKCS12_F_PKCS12_INIT, ERR_R_MALLOC_FAILURE); |
23 | return NULL; |
24 | } |
25 | if (!ASN1_INTEGER_set(pkcs12->version, 3)) |
26 | goto err; |
27 | pkcs12->authsafes->type = OBJ_nid2obj(mode); |
28 | switch (mode) { |
29 | case NID_pkcs7_data: |
30 | if ((pkcs12->authsafes->d.data = ASN1_OCTET_STRING_new()) == NULL) { |
31 | PKCS12err(PKCS12_F_PKCS12_INIT, ERR_R_MALLOC_FAILURE); |
32 | goto err; |
33 | } |
34 | break; |
35 | default: |
36 | PKCS12err(PKCS12_F_PKCS12_INIT, PKCS12_R_UNSUPPORTED_PKCS12_MODE); |
37 | goto err; |
38 | } |
39 | return pkcs12; |
40 | |
41 | err: |
42 | PKCS12_free(pkcs12); |
43 | return NULL; |
44 | } |
45 |