summaryrefslogtreecommitdiff
path: root/src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c')
-rw-r--r--src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c b/src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c
index 40f0beb4..b6eb8502 100644
--- a/src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c
+++ b/src/ltc/pk/asn1/der/printable_string/der_length_printable_string.c
@@ -126,6 +126,7 @@ int der_printable_value_decode(int v)
int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen)
{
unsigned long x;
+ int err;
LTC_ARGCHK(outlen != NULL);
LTC_ARGCHK(octets != NULL);
@@ -137,21 +138,10 @@ int der_length_printable_string(const unsigned char *octets, unsigned long nocte
}
}
- if (noctets < 128) {
- /* 16 LL DD DD DD ... */
- *outlen = 2 + noctets;
- } else if (noctets < 256) {
- /* 16 81 LL DD DD DD ... */
- *outlen = 3 + noctets;
- } else if (noctets < 65536UL) {
- /* 16 82 LL LL DD DD DD ... */
- *outlen = 4 + noctets;
- } else if (noctets < 16777216UL) {
- /* 16 83 LL LL LL DD DD DD ... */
- *outlen = 5 + noctets;
- } else {
- return CRYPT_INVALID_ARG;
+ if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) {
+ return err;
}
+ *outlen = 1 + x + noctets;
return CRYPT_OK;
}