LCOV - code coverage report
Current view: top level - bin/default/source4/heimdal/lib/hx509 - asn1_pkcs10_asn1.c (source / functions) Hit Total Coverage
Test: coverage report for abartlet/fix-coverage dd10fb34 Lines: 0 289 0.0 %
Date: 2021-09-23 10:06:22 Functions: 0 10 0.0 %

          Line data    Source code
       1             : #include "config.h"
       2             : /* Generated from /builds/samba-team/devel/samba/source4/heimdal/lib/hx509/pkcs10.asn1 */
       3             : /* Do not edit */
       4             : 
       5             : #define  ASN1_LIB
       6             : 
       7             : #include <stdio.h>
       8             : #include <stdlib.h>
       9             : #include <time.h>
      10             : #include <string.h>
      11             : #include <errno.h>
      12             : #include <limits.h>
      13             : #include <krb5-types.h>
      14             : #include <pkcs10_asn1.h>
      15             : #include <pkcs10_asn1-priv.h>
      16             : #include <asn1_err.h>
      17             : #include <der.h>
      18             : #include <der-private.h>
      19             : #include <asn1-template.h>
      20             : #include <parse_units.h>
      21             : 
      22             : int ASN1CALL
      23           0 : encode_CertificationRequestInfo(unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, const CertificationRequestInfo *data, size_t *size)
      24             : {
      25           0 : size_t ret HEIMDAL_UNUSED_ATTRIBUTE = 0;
      26             : size_t l HEIMDAL_UNUSED_ATTRIBUTE;
      27             : int i HEIMDAL_UNUSED_ATTRIBUTE, e HEIMDAL_UNUSED_ATTRIBUTE;
      28             : 
      29             : /* attributes */
      30           0 : if((data)->attributes) {
      31           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
      32           0 : ret = 0;
      33             : {
      34             : struct heim_octet_string *val;
      35           0 : size_t elen = 0, totallen = 0;
      36           0 : int eret = 0;
      37           0 : if (((data)->attributes)->len > UINT_MAX/sizeof(val[0]))
      38           0 : return ERANGE;
      39           0 : val = malloc(sizeof(val[0]) * ((data)->attributes)->len);
      40           0 : if (val == NULL && ((data)->attributes)->len != 0) return ENOMEM;
      41           0 : for(i = 0; i < (int)((data)->attributes)->len; i++) {
      42           0 : ASN1_MALLOC_ENCODE(Attribute, val[i].data, val[i].length, &((data)->attributes)->val[i], &elen, eret);
      43           0 : if(eret) {
      44           0 : i--;
      45           0 : while (i >= 0) {
      46           0 : free(val[i].data);
      47           0 : i--;
      48             : }
      49           0 : free(val);
      50           0 : return eret;
      51             : }
      52           0 : totallen += elen;
      53             : }
      54           0 : if (totallen > len) {
      55           0 : for (i = 0; i < (int)((data)->attributes)->len; i++) {
      56           0 : free(val[i].data);
      57             : }
      58           0 : free(val);
      59           0 : return ASN1_OVERFLOW;
      60             : }
      61           0 : qsort(val, ((data)->attributes)->len, sizeof(val[0]), _heim_der_set_sort);
      62           0 : for(i = (int)((data)->attributes)->len - 1; i >= 0; --i) {
      63           0 : p -= val[i].length;
      64           0 : ret += val[i].length;
      65           0 : memcpy(p + 1, val[i].data, val[i].length);
      66           0 : free(val[i].data);
      67             : }
      68           0 : free(val);
      69             : }
      70           0 : e = der_put_length_and_tag (p, len, ret, ASN1_C_CONTEXT, CONS, 0, &l);
      71           0 : if (e) return e;
      72           0 : p -= l; len -= l; ret += l;
      73             : 
      74           0 : ret += Top_tag_oldret;
      75             : }
      76             : /* subjectPKInfo */
      77             : {
      78           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
      79           0 : ret = 0;
      80           0 : e = encode_SubjectPublicKeyInfo(p, len, &(data)->subjectPKInfo, &l);
      81           0 : if (e) return e;
      82           0 : p -= l; len -= l; ret += l;
      83             : 
      84           0 : ret += Top_tag_oldret;
      85             : }
      86             : /* subject */
      87             : {
      88           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
      89           0 : ret = 0;
      90           0 : e = encode_Name(p, len, &(data)->subject, &l);
      91           0 : if (e) return e;
      92           0 : p -= l; len -= l; ret += l;
      93             : 
      94           0 : ret += Top_tag_oldret;
      95             : }
      96             : /* version */
      97             : {
      98           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
      99           0 : ret = 0;
     100             : {
     101           0 : int enumint = (int)*&(data)->version;
     102           0 : e = der_put_integer(p, len, &enumint, &l);
     103           0 : if (e) return e;
     104           0 : p -= l; len -= l; ret += l;
     105             : 
     106             : }
     107           0 : ;e = der_put_length_and_tag (p, len, ret, ASN1_C_UNIV, PRIM, UT_Integer, &l);
     108           0 : if (e) return e;
     109           0 : p -= l; len -= l; ret += l;
     110             : 
     111           0 : ret += Top_tag_oldret;
     112             : }
     113           0 : e = der_put_length_and_tag (p, len, ret, ASN1_C_UNIV, CONS, UT_Sequence, &l);
     114           0 : if (e) return e;
     115           0 : p -= l; len -= l; ret += l;
     116             : 
     117           0 : *size = ret;
     118           0 : return 0;
     119             : }
     120             : 
     121             : int ASN1CALL
     122           0 : decode_CertificationRequestInfo(const unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, CertificationRequestInfo *data, size_t *size)
     123             : {
     124           0 : size_t ret = 0;
     125             : size_t l HEIMDAL_UNUSED_ATTRIBUTE;
     126             : int e HEIMDAL_UNUSED_ATTRIBUTE;
     127           0 : const unsigned char *begin = p;
     128             : 
     129           0 : memset(data, 0, sizeof(*data));
     130             : {
     131             : size_t Top_datalen, Top_oldlen;
     132             : Der_type Top_type;
     133           0 : e = der_match_tag_and_length(p, len, ASN1_C_UNIV, &Top_type, UT_Sequence, &Top_datalen, &l);
     134           0 : if (e == 0 && Top_type != CONS) { e = ASN1_BAD_ID; }
     135           0 : if(e) goto fail;
     136           0 : p += l; len -= l; ret += l;
     137           0 : Top_oldlen = len;
     138           0 : if (Top_datalen > len) { e = ASN1_OVERRUN; goto fail; }
     139           0 : len = Top_datalen;
     140             : {
     141             : size_t version_datalen, version_oldlen;
     142             : Der_type version_type;
     143           0 : e = der_match_tag_and_length(p, len, ASN1_C_UNIV, &version_type, UT_Integer, &version_datalen, &l);
     144           0 : if (e == 0 && version_type != PRIM) { e = ASN1_BAD_ID; }
     145           0 : if(e) goto fail;
     146           0 : p += l; len -= l; ret += l;
     147           0 : version_oldlen = len;
     148           0 : if (version_datalen > len) { e = ASN1_OVERRUN; goto fail; }
     149           0 : len = version_datalen;
     150             : {
     151             : int enumint;
     152           0 : e = der_get_integer(p, len, &enumint, &l);
     153           0 : if(e) goto fail;
     154           0 : p += l; len -= l; ret += l;
     155           0 : *&(data)->version = enumint;
     156             : }
     157           0 : len = version_oldlen - version_datalen;
     158             : }
     159           0 : e = decode_Name(p, len, &(data)->subject, &l);
     160           0 : if(e) goto fail;
     161           0 : p += l; len -= l; ret += l;
     162           0 : e = decode_SubjectPublicKeyInfo(p, len, &(data)->subjectPKInfo, &l);
     163           0 : if(e) goto fail;
     164           0 : p += l; len -= l; ret += l;
     165             : {
     166             : size_t attributes_datalen, attributes_oldlen;
     167             : Der_type attributes_type;
     168           0 : e = der_match_tag_and_length(p, len, ASN1_C_CONTEXT, &attributes_type, 0, &attributes_datalen, &l);
     169           0 : if (e == 0 && attributes_type != CONS) { e = ASN1_BAD_ID; }
     170           0 : if(e) {
     171           0 : (data)->attributes = NULL;
     172             : } else {
     173           0 : (data)->attributes = calloc(1, sizeof(*(data)->attributes));
     174           0 : if ((data)->attributes == NULL) { e = ENOMEM; goto fail; }
     175           0 : p += l; len -= l; ret += l;
     176           0 : attributes_oldlen = len;
     177           0 : if (attributes_datalen > len) { e = ASN1_OVERRUN; goto fail; }
     178           0 : len = attributes_datalen;
     179             : {
     180           0 : size_t attributes_Tag_origlen = len;
     181           0 : size_t attributes_Tag_oldret = ret;
     182           0 : size_t attributes_Tag_olen = 0;
     183             : void *attributes_Tag_tmp;
     184           0 : ret = 0;
     185           0 : ((data)->attributes)->len = 0;
     186           0 : ((data)->attributes)->val = NULL;
     187           0 : while(ret < attributes_Tag_origlen) {
     188           0 : size_t attributes_Tag_nlen = attributes_Tag_olen + sizeof(*(((data)->attributes)->val));
     189           0 : if (attributes_Tag_olen > attributes_Tag_nlen) { e = ASN1_OVERFLOW; goto fail; }
     190           0 : attributes_Tag_olen = attributes_Tag_nlen;
     191           0 : attributes_Tag_tmp = realloc(((data)->attributes)->val, attributes_Tag_olen);
     192           0 : if (attributes_Tag_tmp == NULL) { e = ENOMEM; goto fail; }
     193           0 : ((data)->attributes)->val = attributes_Tag_tmp;
     194           0 : e = decode_Attribute(p, len, &((data)->attributes)->val[((data)->attributes)->len], &l);
     195           0 : if(e) goto fail;
     196           0 : p += l; len -= l; ret += l;
     197           0 : ((data)->attributes)->len++;
     198           0 : len = attributes_Tag_origlen - ret;
     199             : }
     200           0 : ret += attributes_Tag_oldret;
     201             : }
     202           0 : len = attributes_oldlen - attributes_datalen;
     203             : }
     204             : }
     205           0 : len = Top_oldlen - Top_datalen;
     206             : }
     207           0 : data->_save.data = calloc(1, ret);
     208           0 : if (data->_save.data == NULL) { 
     209           0 : e = ENOMEM; goto fail; 
     210             : }
     211           0 : data->_save.length = ret;
     212           0 : memcpy(data->_save.data, begin, ret);
     213           0 : if(size) *size = ret;
     214           0 : return 0;
     215           0 : fail:
     216           0 : free_CertificationRequestInfo(data);
     217           0 : return e;
     218             : }
     219             : 
     220             : void ASN1CALL
     221           0 : free_CertificationRequestInfo(CertificationRequestInfo *data)
     222             : {
     223           0 : der_free_octet_string(&data->_save);
     224           0 : free_Name(&(data)->subject);
     225           0 : free_SubjectPublicKeyInfo(&(data)->subjectPKInfo);
     226           0 : if((data)->attributes) {
     227           0 : while(((data)->attributes)->len){
     228           0 : free_Attribute(&((data)->attributes)->val[((data)->attributes)->len-1]);
     229           0 : ((data)->attributes)->len--;
     230             : }
     231           0 : free(((data)->attributes)->val);
     232           0 : ((data)->attributes)->val = NULL;
     233           0 : free((data)->attributes);
     234           0 : (data)->attributes = NULL;
     235             : }
     236           0 : }
     237             : 
     238             : size_t ASN1CALL
     239           0 : length_CertificationRequestInfo(const CertificationRequestInfo *data)
     240             : {
     241           0 : size_t ret = 0;
     242             : {
     243           0 : size_t Top_tag_oldret = ret;
     244           0 : ret = 0;
     245             : {
     246           0 : int enumint = *&(data)->version;
     247           0 : ret += der_length_integer(&enumint);
     248             : }
     249           0 : ret += 1 + der_length_len (ret);
     250           0 : ret += Top_tag_oldret;
     251             : }
     252             : {
     253           0 : size_t Top_tag_oldret = ret;
     254           0 : ret = 0;
     255           0 : ret += length_Name(&(data)->subject);
     256           0 : ret += Top_tag_oldret;
     257             : }
     258             : {
     259           0 : size_t Top_tag_oldret = ret;
     260           0 : ret = 0;
     261           0 : ret += length_SubjectPublicKeyInfo(&(data)->subjectPKInfo);
     262           0 : ret += Top_tag_oldret;
     263             : }
     264           0 : if((data)->attributes){
     265           0 : size_t Top_tag_oldret = ret;
     266           0 : ret = 0;
     267             : {
     268           0 : size_t attributes_tag_oldret = ret;
     269             : int i;
     270           0 : ret = 0;
     271           0 : for(i = ((data)->attributes)->len - 1; i >= 0; --i){
     272           0 : size_t attributes_tag_for_oldret = ret;
     273           0 : ret = 0;
     274           0 : ret += length_Attribute(&((data)->attributes)->val[i]);
     275           0 : ret += attributes_tag_for_oldret;
     276             : }
     277           0 : ret += attributes_tag_oldret;
     278             : }
     279           0 : ret += 1 + der_length_len (ret);
     280           0 : ret += Top_tag_oldret;
     281             : }
     282           0 : ret += 1 + der_length_len (ret);
     283           0 : return ret;
     284             : }
     285             : 
     286             : int ASN1CALL
     287           0 : copy_CertificationRequestInfo(const CertificationRequestInfo *from, CertificationRequestInfo *to)
     288             : {
     289           0 : memset(to, 0, sizeof(*to));
     290             : { int ret;
     291           0 : ret = der_copy_octet_string(&(from)->_save, &(to)->_save);
     292           0 : if (ret) goto fail;
     293             : }
     294           0 : *(&(to)->version) = *(&(from)->version);
     295           0 : if(copy_Name(&(from)->subject, &(to)->subject)) goto fail;
     296           0 : if(copy_SubjectPublicKeyInfo(&(from)->subjectPKInfo, &(to)->subjectPKInfo)) goto fail;
     297           0 : if((from)->attributes) {
     298           0 : (to)->attributes = malloc(sizeof(*(to)->attributes));
     299           0 : if((to)->attributes == NULL) goto fail;
     300           0 : if((((to)->attributes)->val = malloc(((from)->attributes)->len * sizeof(*((to)->attributes)->val))) == NULL && ((from)->attributes)->len != 0)
     301           0 : goto fail;
     302           0 : for(((to)->attributes)->len = 0; ((to)->attributes)->len < ((from)->attributes)->len; ((to)->attributes)->len++){
     303           0 : if(copy_Attribute(&((from)->attributes)->val[((to)->attributes)->len], &((to)->attributes)->val[((to)->attributes)->len])) goto fail;
     304             : }
     305             : }else
     306           0 : (to)->attributes = NULL;
     307           0 : return 0;
     308           0 : fail:
     309           0 : free_CertificationRequestInfo(to);
     310           0 : return ENOMEM;
     311             : }
     312             : 
     313             : int ASN1CALL
     314           0 : encode_CertificationRequest(unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, const CertificationRequest *data, size_t *size)
     315             : {
     316           0 : size_t ret HEIMDAL_UNUSED_ATTRIBUTE = 0;
     317             : size_t l HEIMDAL_UNUSED_ATTRIBUTE;
     318             : int i HEIMDAL_UNUSED_ATTRIBUTE, e HEIMDAL_UNUSED_ATTRIBUTE;
     319             : 
     320             : /* signature */
     321             : {
     322           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
     323           0 : ret = 0;
     324           0 : e = der_put_bit_string(p, len, &(data)->signature, &l);
     325           0 : if (e) return e;
     326           0 : p -= l; len -= l; ret += l;
     327             : 
     328           0 : e = der_put_length_and_tag (p, len, ret, ASN1_C_UNIV, PRIM, UT_BitString, &l);
     329           0 : if (e) return e;
     330           0 : p -= l; len -= l; ret += l;
     331             : 
     332           0 : ret += Top_tag_oldret;
     333             : }
     334             : /* signatureAlgorithm */
     335             : {
     336           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
     337           0 : ret = 0;
     338           0 : e = encode_AlgorithmIdentifier(p, len, &(data)->signatureAlgorithm, &l);
     339           0 : if (e) return e;
     340           0 : p -= l; len -= l; ret += l;
     341             : 
     342           0 : ret += Top_tag_oldret;
     343             : }
     344             : /* certificationRequestInfo */
     345             : {
     346           0 : size_t Top_tag_oldret HEIMDAL_UNUSED_ATTRIBUTE = ret;
     347           0 : ret = 0;
     348           0 : e = encode_CertificationRequestInfo(p, len, &(data)->certificationRequestInfo, &l);
     349           0 : if (e) return e;
     350           0 : p -= l; len -= l; ret += l;
     351             : 
     352           0 : ret += Top_tag_oldret;
     353             : }
     354           0 : e = der_put_length_and_tag (p, len, ret, ASN1_C_UNIV, CONS, UT_Sequence, &l);
     355           0 : if (e) return e;
     356           0 : p -= l; len -= l; ret += l;
     357             : 
     358           0 : *size = ret;
     359           0 : return 0;
     360             : }
     361             : 
     362             : int ASN1CALL
     363           0 : decode_CertificationRequest(const unsigned char *p HEIMDAL_UNUSED_ATTRIBUTE, size_t len HEIMDAL_UNUSED_ATTRIBUTE, CertificationRequest *data, size_t *size)
     364             : {
     365           0 : size_t ret = 0;
     366             : size_t l HEIMDAL_UNUSED_ATTRIBUTE;
     367             : int e HEIMDAL_UNUSED_ATTRIBUTE;
     368             : 
     369           0 : memset(data, 0, sizeof(*data));
     370             : {
     371             : size_t Top_datalen, Top_oldlen;
     372             : Der_type Top_type;
     373           0 : e = der_match_tag_and_length(p, len, ASN1_C_UNIV, &Top_type, UT_Sequence, &Top_datalen, &l);
     374           0 : if (e == 0 && Top_type != CONS) { e = ASN1_BAD_ID; }
     375           0 : if(e) goto fail;
     376           0 : p += l; len -= l; ret += l;
     377           0 : Top_oldlen = len;
     378           0 : if (Top_datalen > len) { e = ASN1_OVERRUN; goto fail; }
     379           0 : len = Top_datalen;
     380           0 : e = decode_CertificationRequestInfo(p, len, &(data)->certificationRequestInfo, &l);
     381           0 : if(e) goto fail;
     382           0 : p += l; len -= l; ret += l;
     383           0 : e = decode_AlgorithmIdentifier(p, len, &(data)->signatureAlgorithm, &l);
     384           0 : if(e) goto fail;
     385           0 : p += l; len -= l; ret += l;
     386             : {
     387             : size_t signature_datalen, signature_oldlen;
     388             : Der_type signature_type;
     389           0 : e = der_match_tag_and_length(p, len, ASN1_C_UNIV, &signature_type, UT_BitString, &signature_datalen, &l);
     390           0 : if (e == 0 && signature_type != PRIM) { e = ASN1_BAD_ID; }
     391           0 : if(e) goto fail;
     392           0 : p += l; len -= l; ret += l;
     393           0 : signature_oldlen = len;
     394           0 : if (signature_datalen > len) { e = ASN1_OVERRUN; goto fail; }
     395           0 : len = signature_datalen;
     396           0 : e = der_get_bit_string(p, len, &(data)->signature, &l);
     397           0 : if(e) goto fail;
     398           0 : p += l; len -= l; ret += l;
     399           0 : len = signature_oldlen - signature_datalen;
     400             : }
     401           0 : len = Top_oldlen - Top_datalen;
     402             : }
     403           0 : if(size) *size = ret;
     404           0 : return 0;
     405           0 : fail:
     406           0 : free_CertificationRequest(data);
     407           0 : return e;
     408             : }
     409             : 
     410             : void ASN1CALL
     411           0 : free_CertificationRequest(CertificationRequest *data)
     412             : {
     413           0 : free_CertificationRequestInfo(&(data)->certificationRequestInfo);
     414           0 : free_AlgorithmIdentifier(&(data)->signatureAlgorithm);
     415           0 : der_free_bit_string(&(data)->signature);
     416           0 : }
     417             : 
     418             : size_t ASN1CALL
     419           0 : length_CertificationRequest(const CertificationRequest *data)
     420             : {
     421           0 : size_t ret = 0;
     422             : {
     423           0 : size_t Top_tag_oldret = ret;
     424           0 : ret = 0;
     425           0 : ret += length_CertificationRequestInfo(&(data)->certificationRequestInfo);
     426           0 : ret += Top_tag_oldret;
     427             : }
     428             : {
     429           0 : size_t Top_tag_oldret = ret;
     430           0 : ret = 0;
     431           0 : ret += length_AlgorithmIdentifier(&(data)->signatureAlgorithm);
     432           0 : ret += Top_tag_oldret;
     433             : }
     434             : {
     435           0 : size_t Top_tag_oldret = ret;
     436           0 : ret = 0;
     437           0 : ret += der_length_bit_string(&(data)->signature);
     438           0 : ret += 1 + der_length_len (ret);
     439           0 : ret += Top_tag_oldret;
     440             : }
     441           0 : ret += 1 + der_length_len (ret);
     442           0 : return ret;
     443             : }
     444             : 
     445             : int ASN1CALL
     446           0 : copy_CertificationRequest(const CertificationRequest *from, CertificationRequest *to)
     447             : {
     448           0 : memset(to, 0, sizeof(*to));
     449           0 : if(copy_CertificationRequestInfo(&(from)->certificationRequestInfo, &(to)->certificationRequestInfo)) goto fail;
     450           0 : if(copy_AlgorithmIdentifier(&(from)->signatureAlgorithm, &(to)->signatureAlgorithm)) goto fail;
     451           0 : if(der_copy_bit_string(&(from)->signature, &(to)->signature)) goto fail;
     452           0 : return 0;
     453           0 : fail:
     454           0 : free_CertificationRequest(to);
     455           0 : return ENOMEM;
     456             : }
     457             : 

Generated by: LCOV version 1.13