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