len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
counter += len3 + len2;
_asn1_get_objectid_der (der + counter, len - counter, &len2,
temp, sizeof (temp));
if (result != ASN1_SUCCESS)
- goto cleanup;
+ goto cleanup;
tlen = strlen (temp);
if (tlen > 0)
len3 = len - counter;
result = _asn1_get_octet_string (der + counter, p, &len3);
if (result != ASN1_SUCCESS)
- goto cleanup;
+ goto cleanup;
counter += len3;
move = RIGHT;
len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
counter += len3 + len2;
len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
counter += len3 + len2;
}
}
else
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += 2;
}
else
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2;
if (len3 > 0)
{
if (len2 == -1)
{ /* indefinite length method */
if ((counter + 2) > len)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if ((der[counter]) || der[counter + 1])
{
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2;
if (len3)
{
if (asn1_get_tag_der
(der + counter, len - counter, &class, &len2,
&tag) != ASN1_SUCCESS)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (counter + len2 > len)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
len4 =
asn1_get_length_der (der + counter + len2,
len - counter - len2, &len3);
if (len4 < -1)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (len4 != -1)
{
len2 += len4;
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
}
}
move = RIGHT;
len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (state == FOUND)
{
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
if (p == nodeFound)
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
len2 += len3;
}
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
len2 += len3;
}
len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (state == FOUND)
{
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
if (p == nodeFound)
len2 =
asn1_get_length_der (der + counter, len - counter, &len3);
if (len2 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (state == FOUND)
{
if (len3 + len2 > len - counter)
{
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
_asn1_set_value (p, der + counter, len3 + len2);
if (p == nodeFound)
asn1_get_length_der (der + counter, len - counter,
&len2);
if (len3 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2 + len3;
move = RIGHT;
}
asn1_get_length_der (der + counter, len - counter,
&len2);
if (len3 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2;
if (len3 > 0)
{
asn1_get_length_der (der + counter, len - counter,
&len2);
if (len3 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2 + len3;
move = RIGHT;
}
asn1_get_length_der (der + counter, len - counter,
&len2);
if (len3 < 0)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
counter += len2;
if (len3)
{
if (asn1_get_tag_der
(der + counter, len - counter, &class, &len2,
&tag) != ASN1_SUCCESS)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (counter + len2 > len)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
len4 =
asn1_get_length_der (der + counter + len2,
len - counter - len2, &len3);
if (len4 < -1)
- {
+ {
result = ASN1_DER_ERROR;
goto cleanup;
- }
+ }
if (len4 != -1)
{
};
static const struct tv tv[] = {
- { 0, "", 2, "\x01\x00" },
- { 1, "\x00", 3, "\x02\x07\x00" },
- { 2, "\x00", 3, "\x02\x06\x00" },
- { 3, "\x00", 3, "\x02\x05\x00" },
- { 4, "\x00", 3, "\x02\x04\x00" },
- { 5, "\x00", 3, "\x02\x03\x00" },
- { 6, "\x00", 3, "\x02\x02\x00" },
- { 7, "\x00", 3, "\x02\x01\x00" },
- { 8, "\x00\x00", 3, "\x02\x00\x00" },
- { 9, "\x00\x00", 4, "\x03\x07\x00\x00" },
- { 10, "\x00\x00", 4, "\x03\x06\x00\x00" },
- { 11, "\x00\x00", 4, "\x03\x05\x00\x00" },
- { 12, "\x00\x00", 4, "\x03\x04\x00\x00" },
- { 13, "\x00\x00", 4, "\x03\x03\x00\x00" },
- { 14, "\x00\x00", 4, "\x03\x02\x00\x00" },
- { 15, "\x00\x00", 4, "\x03\x01\x00\x00" },
- { 16, "\x00\x00", 4, "\x03\x00\x00\x00" },
- { 17, "\x00\x00\x00", 5, "\x04\x07\x00\x00\x00" },
- { 18, "\x00\x00\x00", 5, "\x04\x06\x00\x00\x00" },
- { 19, "\x00\x00\x00", 5, "\x04\x05\x00\x00\x00" },
- { 1, "\xFF", 3, "\x02\x07\x80" },
- { 2, "\xFF", 3, "\x02\x06\xc0" },
- { 3, "\xFF", 3, "\x02\x05\xe0" },
- { 4, "\xFF", 3, "\x02\x04\xf0" },
- { 5, "\xFF", 3, "\x02\x03\xf8" },
- { 6, "\xFF", 3, "\x02\x02\xfc" },
- { 7, "\xFF", 3, "\x02\x01\xfe" },
- { 8, "\xFF\xFF", 3, "\x02\x00\xff" },
- { 9, "\xFF\xFF", 4, "\x03\x07\xff\x80" },
- { 10, "\xFF\xFF", 4, "\x03\x06\xff\xc0" },
- { 11, "\xFF\xFF", 4, "\x03\x05\xff\xe0" },
- { 12, "\xFF\xFF", 4, "\x03\x04\xff\xf0" },
- { 13, "\xFF\xFF", 4, "\x03\x03\xff\xf8" },
- { 14, "\xFF\xFF", 4, "\x03\x02\xff\xfc" },
- { 15, "\xFF\xFF", 4, "\x03\x01\xff\xfe" },
- { 16, "\xFF\xFF", 4, "\x03\x00\xff\xff" },
- { 17, "\xFF\xFF\xFF", 5, "\x04\x07\xff\xff\x80" },
- { 18, "\xFF\xFF\xFF", 5, "\x04\x06\xff\xff\xc0" },
- { 19, "\xFF\xFF\xFF", 5, "\x04\x05\xff\xff\xe0" },
+ {0, "", 2, "\x01\x00"},
+ {1, "\x00", 3, "\x02\x07\x00"},
+ {2, "\x00", 3, "\x02\x06\x00"},
+ {3, "\x00", 3, "\x02\x05\x00"},
+ {4, "\x00", 3, "\x02\x04\x00"},
+ {5, "\x00", 3, "\x02\x03\x00"},
+ {6, "\x00", 3, "\x02\x02\x00"},
+ {7, "\x00", 3, "\x02\x01\x00"},
+ {8, "\x00\x00", 3, "\x02\x00\x00"},
+ {9, "\x00\x00", 4, "\x03\x07\x00\x00"},
+ {10, "\x00\x00", 4, "\x03\x06\x00\x00"},
+ {11, "\x00\x00", 4, "\x03\x05\x00\x00"},
+ {12, "\x00\x00", 4, "\x03\x04\x00\x00"},
+ {13, "\x00\x00", 4, "\x03\x03\x00\x00"},
+ {14, "\x00\x00", 4, "\x03\x02\x00\x00"},
+ {15, "\x00\x00", 4, "\x03\x01\x00\x00"},
+ {16, "\x00\x00", 4, "\x03\x00\x00\x00"},
+ {17, "\x00\x00\x00", 5, "\x04\x07\x00\x00\x00"},
+ {18, "\x00\x00\x00", 5, "\x04\x06\x00\x00\x00"},
+ {19, "\x00\x00\x00", 5, "\x04\x05\x00\x00\x00"},
+ {1, "\xFF", 3, "\x02\x07\x80"},
+ {2, "\xFF", 3, "\x02\x06\xc0"},
+ {3, "\xFF", 3, "\x02\x05\xe0"},
+ {4, "\xFF", 3, "\x02\x04\xf0"},
+ {5, "\xFF", 3, "\x02\x03\xf8"},
+ {6, "\xFF", 3, "\x02\x02\xfc"},
+ {7, "\xFF", 3, "\x02\x01\xfe"},
+ {8, "\xFF\xFF", 3, "\x02\x00\xff"},
+ {9, "\xFF\xFF", 4, "\x03\x07\xff\x80"},
+ {10, "\xFF\xFF", 4, "\x03\x06\xff\xc0"},
+ {11, "\xFF\xFF", 4, "\x03\x05\xff\xe0"},
+ {12, "\xFF\xFF", 4, "\x03\x04\xff\xf0"},
+ {13, "\xFF\xFF", 4, "\x03\x03\xff\xf8"},
+ {14, "\xFF\xFF", 4, "\x03\x02\xff\xfc"},
+ {15, "\xFF\xFF", 4, "\x03\x01\xff\xfe"},
+ {16, "\xFF\xFF", 4, "\x03\x00\xff\xff"},
+ {17, "\xFF\xFF\xFF", 5, "\x04\x07\xff\xff\x80"},
+ {18, "\xFF\xFF\xFF", 5, "\x04\x06\xff\xff\xc0"},
+ {19, "\xFF\xFF\xFF", 5, "\x04\x05\xff\xff\xe0"},
};
int
}
#endif
- if (der_len != tv[i].derlen
- || memcmp (der, tv[i].der, der_len) != 0)
+ if (der_len != tv[i].derlen || memcmp (der, tv[i].der, der_len) != 0)
{
fprintf (stderr, "asn1_bit_der iter %ld\n", i);
return 1;
STRING value "011011100101110111" can be any of the following,
among others, depending on the choice of padding bits, the form
of length octets [...]".
- */
+ */
/* 03 04 06 6e 5d c0 DER encoding */