| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/asn1/p5_pbe.c | 
| Source code | Switch to Preprocessed file | 
| Line | Source | Count | ||||||
|---|---|---|---|---|---|---|---|---|
| 1 | /* | - | ||||||
| 2 | * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||
| 3 | * | - | ||||||
| 4 | * Licensed under the OpenSSL license (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/asn1t.h> | - | ||||||
| 13 | #include <openssl/x509.h> | - | ||||||
| 14 | #include <openssl/rand.h> | - | ||||||
| 15 | - | |||||||
| 16 | /* PKCS#5 password based encryption structure */ | - | ||||||
| 17 | - | |||||||
| 18 | ASN1_SEQUENCE(PBEPARAM) = { | - | ||||||
| 19 | ASN1_SIMPLE(PBEPARAM, salt, ASN1_OCTET_STRING), | - | ||||||
| 20 | ASN1_SIMPLE(PBEPARAM, iter, ASN1_INTEGER) | - | ||||||
| 21 | } ASN1_SEQUENCE_END(PBEPARAM) | - | ||||||
| 22 | - | |||||||
| 23 | IMPLEMENT_ASN1_FUNCTIONS(PBEPARAM) never executed:  end of blocknever executed:  return (PBEPARAM *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(PBEPARAM_it)));never executed:  return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(PBEPARAM_it)));never executed:  return (PBEPARAM *)ASN1_item_new((&(PBEPARAM_it))); | 0 | ||||||
| 24 | - | |||||||
| 25 | /* Set an algorithm identifier for a PKCS#5 PBE algorithm */ | - | ||||||
| 26 | - | |||||||
| 27 | int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, | - | ||||||
| 28 | const unsigned char *salt, int saltlen) | - | ||||||
| 29 | { | - | ||||||
| 30 | PBEPARAM *pbe = NULL; | - | ||||||
| 31 | ASN1_STRING *pbe_str = NULL; | - | ||||||
| 32 | unsigned char *sstr = NULL; | - | ||||||
| 33 | - | |||||||
| 34 | pbe = PBEPARAM_new(); | - | ||||||
| 35 | if (pbe == NULL) { 
 | 0 | ||||||
| 36 | ASN1err(ASN1_F_PKCS5_PBE_SET0_ALGOR, ERR_R_MALLOC_FAILURE); | - | ||||||
| 37 | goto err; never executed:  goto err; | 0 | ||||||
| 38 | } | - | ||||||
| 39 | if (iter <= 0) 
 | 0 | ||||||
| 40 | iter = PKCS5_DEFAULT_ITER; never executed:  iter = 2048; | 0 | ||||||
| 41 | if (!ASN1_INTEGER_set(pbe->iter, iter)) { 
 | 0 | ||||||
| 42 | ASN1err(ASN1_F_PKCS5_PBE_SET0_ALGOR, ERR_R_MALLOC_FAILURE); | - | ||||||
| 43 | goto err; never executed:  goto err; | 0 | ||||||
| 44 | } | - | ||||||
| 45 | if (!saltlen) 
 | 0 | ||||||
| 46 | saltlen = PKCS5_SALT_LEN; never executed:  saltlen = 8; | 0 | ||||||
| 47 | - | |||||||
| 48 | sstr = OPENSSL_malloc(saltlen); | - | ||||||
| 49 | if (sstr == NULL) { 
 | 0 | ||||||
| 50 | ASN1err(ASN1_F_PKCS5_PBE_SET0_ALGOR, ERR_R_MALLOC_FAILURE); | - | ||||||
| 51 | goto err; never executed:  goto err; | 0 | ||||||
| 52 | } | - | ||||||
| 53 | if (salt) 
 | 0 | ||||||
| 54 | memcpy(sstr, salt, saltlen); never executed:  memcpy(sstr, salt, saltlen); | 0 | ||||||
| 55 | else if (RAND_bytes(sstr, saltlen) <= 0) 
 | 0 | ||||||
| 56 | goto err; never executed:  goto err; | 0 | ||||||
| 57 | - | |||||||
| 58 | ASN1_STRING_set0(pbe->salt, sstr, saltlen); | - | ||||||
| 59 | sstr = NULL; | - | ||||||
| 60 | - | |||||||
| 61 | if (!ASN1_item_pack(pbe, ASN1_ITEM_rptr(PBEPARAM), &pbe_str)) { 
 | 0 | ||||||
| 62 | ASN1err(ASN1_F_PKCS5_PBE_SET0_ALGOR, ERR_R_MALLOC_FAILURE); | - | ||||||
| 63 | goto err; never executed:  goto err; | 0 | ||||||
| 64 | } | - | ||||||
| 65 | - | |||||||
| 66 | PBEPARAM_free(pbe); | - | ||||||
| 67 | pbe = NULL; | - | ||||||
| 68 | - | |||||||
| 69 | if (X509_ALGOR_set0(algor, OBJ_nid2obj(alg), V_ASN1_SEQUENCE, pbe_str)) 
 | 0 | ||||||
| 70 | return 1; never executed:  return 1; | 0 | ||||||
| 71 | - | |||||||
| 72 | err: code before this statement never executed:  err: | 0 | ||||||
| 73 | OPENSSL_free(sstr); | - | ||||||
| 74 | PBEPARAM_free(pbe); | - | ||||||
| 75 | ASN1_STRING_free(pbe_str); | - | ||||||
| 76 | return 0; never executed:  return 0; | 0 | ||||||
| 77 | } | - | ||||||
| 78 | - | |||||||
| 79 | /* Return an algorithm identifier for a PKCS#5 PBE algorithm */ | - | ||||||
| 80 | - | |||||||
| 81 | X509_ALGOR *PKCS5_pbe_set(int alg, int iter, | - | ||||||
| 82 | const unsigned char *salt, int saltlen) | - | ||||||
| 83 | { | - | ||||||
| 84 | X509_ALGOR *ret; | - | ||||||
| 85 | ret = X509_ALGOR_new(); | - | ||||||
| 86 | if (ret == NULL) { 
 | 0 | ||||||
| 87 | ASN1err(ASN1_F_PKCS5_PBE_SET, ERR_R_MALLOC_FAILURE); | - | ||||||
| 88 | return NULL; never executed:  return ((void *)0) ; | 0 | ||||||
| 89 | } | - | ||||||
| 90 | - | |||||||
| 91 | if (PKCS5_pbe_set0_algor(ret, alg, iter, salt, saltlen)) 
 | 0 | ||||||
| 92 | return ret; never executed:  return ret; | 0 | ||||||
| 93 | - | |||||||
| 94 | X509_ALGOR_free(ret); | - | ||||||
| 95 | return NULL; never executed:  return ((void *)0) ; | 0 | ||||||
| 96 | } | - | ||||||
| Source code | Switch to Preprocessed file |