1 /* 2 * Copyright 1999-2016 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/conf.h> 13 #include <openssl/x509v3.h> 14 15 int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, 16 BIT_STRING_BITNAME *tbl, int indent) 17 { 18 BIT_STRING_BITNAME *bnam; 19 char first = 1; 20 BIO_printf(out, "%*s", indent, ""); 21 for (bnam = tbl; bnam->lname; bnam++) { 22 if (ASN1_BIT_STRING_get_bit(bs, bnam->bitnum)) { 23 if (!first) 24 BIO_puts(out, ", "); 25 BIO_puts(out, bnam->lname); 26 first = 0; 27 } 28 } 29 BIO_puts(out, "\n"); 30 return 1; 31 } 32 33 int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, 34 BIT_STRING_BITNAME *tbl) 35 { 36 int bitnum; 37 bitnum = ASN1_BIT_STRING_num_asc(name, tbl); 38 if (bitnum < 0) 39 return 0; 40 if (bs) { 41 if (!ASN1_BIT_STRING_set_bit(bs, bitnum, value)) 42 return 0; 43 } 44 return 1; 45 } 46 47 int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl) 48 { 49 BIT_STRING_BITNAME *bnam; 50 for (bnam = tbl; bnam->lname; bnam++) { 51 if ((strcmp(bnam->sname, name) == 0) 52 || (strcmp(bnam->lname, name) == 0)) 53 return bnam->bitnum; 54 } 55 return -1; 56 } 57