2 * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
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
11 #include "crypto/ctype.h"
12 #include "internal/cryptlib.h"
13 #include <openssl/asn1.h>
15 int ASN1_PRINTABLE_type(const unsigned char *s, int len)
22 return V_ASN1_PRINTABLESTRING;
25 len = strlen((const char *)s);
29 if (!ossl_isasn1print(c))
35 return V_ASN1_T61STRING;
37 return V_ASN1_IA5STRING;
38 return V_ASN1_PRINTABLESTRING;
41 int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s)
46 if (s->type != V_ASN1_UNIVERSALSTRING)
48 if ((s->length % 4) != 0)
51 for (i = 0; i < s->length; i += 4) {
52 if ((p[0] != '\0') || (p[1] != '\0') || (p[2] != '\0'))
60 for (i = 3; i < s->length; i += 4) {
65 s->type = ASN1_PRINTABLE_type(s->data, s->length);
69 int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v)
78 p = (const char *)v->data;
79 for (i = 0; i < v->length; i++) {
80 if ((p[i] > '~') || ((p[i] < ' ') &&
81 (p[i] != '\n') && (p[i] != '\r')))
87 if (BIO_write(bp, buf, n) <= 0)
93 if (BIO_write(bp, buf, n) <= 0)