xref: /freebsd/crypto/openssl/crypto/asn1/t_bitst.c (revision b077aed3)
16f9291ceSJung-uk Kim /*
2e71b7053SJung-uk Kim  * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
3f579bf8eSKris 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
8f579bf8eSKris Kennaway  */
9f579bf8eSKris Kennaway 
10f579bf8eSKris Kennaway #include <stdio.h>
11e71b7053SJung-uk Kim #include "internal/cryptlib.h"
12f579bf8eSKris Kennaway #include <openssl/conf.h>
13f579bf8eSKris Kennaway #include <openssl/x509v3.h>
14f579bf8eSKris Kennaway 
ASN1_BIT_STRING_name_print(BIO * out,ASN1_BIT_STRING * bs,BIT_STRING_BITNAME * tbl,int indent)15f579bf8eSKris Kennaway int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,
16f579bf8eSKris Kennaway                                BIT_STRING_BITNAME *tbl, int indent)
17f579bf8eSKris Kennaway {
18f579bf8eSKris Kennaway     BIT_STRING_BITNAME *bnam;
19f579bf8eSKris Kennaway     char first = 1;
20f579bf8eSKris Kennaway     BIO_printf(out, "%*s", indent, "");
21f579bf8eSKris Kennaway     for (bnam = tbl; bnam->lname; bnam++) {
22f579bf8eSKris Kennaway         if (ASN1_BIT_STRING_get_bit(bs, bnam->bitnum)) {
236f9291ceSJung-uk Kim             if (!first)
246f9291ceSJung-uk Kim                 BIO_puts(out, ", ");
25f579bf8eSKris Kennaway             BIO_puts(out, bnam->lname);
26f579bf8eSKris Kennaway             first = 0;
27f579bf8eSKris Kennaway         }
28f579bf8eSKris Kennaway     }
29f579bf8eSKris Kennaway     BIO_puts(out, "\n");
30f579bf8eSKris Kennaway     return 1;
31f579bf8eSKris Kennaway }
32f579bf8eSKris Kennaway 
ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING * bs,const char * name,int value,BIT_STRING_BITNAME * tbl)33e71b7053SJung-uk Kim int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value,
34f579bf8eSKris Kennaway                             BIT_STRING_BITNAME *tbl)
35f579bf8eSKris Kennaway {
36f579bf8eSKris Kennaway     int bitnum;
37f579bf8eSKris Kennaway     bitnum = ASN1_BIT_STRING_num_asc(name, tbl);
386f9291ceSJung-uk Kim     if (bitnum < 0)
396f9291ceSJung-uk Kim         return 0;
403b4e3dcbSSimon L. B. Nielsen     if (bs) {
413b4e3dcbSSimon L. B. Nielsen         if (!ASN1_BIT_STRING_set_bit(bs, bitnum, value))
423b4e3dcbSSimon L. B. Nielsen             return 0;
433b4e3dcbSSimon L. B. Nielsen     }
44f579bf8eSKris Kennaway     return 1;
45f579bf8eSKris Kennaway }
46f579bf8eSKris Kennaway 
ASN1_BIT_STRING_num_asc(const char * name,BIT_STRING_BITNAME * tbl)47e71b7053SJung-uk Kim int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl)
48f579bf8eSKris Kennaway {
49f579bf8eSKris Kennaway     BIT_STRING_BITNAME *bnam;
50f579bf8eSKris Kennaway     for (bnam = tbl; bnam->lname; bnam++) {
51e71b7053SJung-uk Kim         if ((strcmp(bnam->sname, name) == 0)
52e71b7053SJung-uk Kim             || (strcmp(bnam->lname, name) == 0))
536f9291ceSJung-uk Kim             return bnam->bitnum;
54f579bf8eSKris Kennaway     }
55f579bf8eSKris Kennaway     return -1;
56f579bf8eSKris Kennaway }
57