| Index: openssl/crypto/asn1/a_bitstr.c
|
| ===================================================================
|
| --- openssl/crypto/asn1/a_bitstr.c (revision 105093)
|
| +++ openssl/crypto/asn1/a_bitstr.c (working copy)
|
| @@ -223,3 +223,26 @@
|
| return((a->data[w]&v) != 0);
|
| }
|
|
|
| +/*
|
| + * Checks if the given bit string contains only bits specified by
|
| + * the flags vector. Returns 0 if there is at least one bit set in 'a'
|
| + * which is not specified in 'flags', 1 otherwise.
|
| + * 'len' is the length of 'flags'.
|
| + */
|
| +int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a,
|
| + unsigned char *flags, int flags_len)
|
| + {
|
| + int i, ok;
|
| + /* Check if there is one bit set at all. */
|
| + if (!a || !a->data) return 1;
|
| +
|
| + /* Check each byte of the internal representation of the bit string. */
|
| + ok = 1;
|
| + for (i = 0; i < a->length && ok; ++i)
|
| + {
|
| + unsigned char mask = i < flags_len ? ~flags[i] : 0xff;
|
| + /* We are done if there is an unneeded bit set. */
|
| + ok = (a->data[i] & mask) == 0;
|
| + }
|
| + return ok;
|
| + }
|
|
|