Extract function to convert ASN.1 INTEGER object to u_int64_t

This commit is contained in:
Tobias Brunner
2013-05-08 14:53:08 +02:00
parent 4076e3ee91
commit c734c2d875
3 changed files with 28 additions and 23 deletions
+16
View File
@@ -549,6 +549,22 @@ bool asn1_parse_simple_object(chunk_t *object, asn1_t type, u_int level, const c
return TRUE; return TRUE;
} }
/*
* Described in header
*/
u_int64_t asn1_parse_integer_uint64(chunk_t blob)
{
u_int64_t val = 0;
int i;
for (i = 0; i < blob.len; i++)
{ /* if it is longer than 8 bytes, we just use the 8 LSBs */
val <<= 8;
val |= (u_int64_t)blob.ptr[i];
}
return val;
}
/** /**
* ASN.1 definition of an algorithmIdentifier * ASN.1 definition of an algorithmIdentifier
*/ */
+9
View File
@@ -170,6 +170,15 @@ int asn1_parse_algorithmIdentifier(chunk_t blob, int level0, chunk_t *params);
bool asn1_parse_simple_object(chunk_t *object, asn1_t type, u_int level0, bool asn1_parse_simple_object(chunk_t *object, asn1_t type, u_int level0,
const char* name); const char* name);
/**
* Converts an ASN.1 INTEGER object to an u_int64_t. If the INTEGER is longer
* than 8 bytes only the 8 LSBs are returned.
*
* @param blob body of an ASN.1 coded integer object
* @return converted integer
*/
u_int64_t asn1_parse_integer_uint64(chunk_t blob);
/** /**
* Print the value of an ASN.1 simple object * Print the value of an ASN.1 simple object
* *
+3 -23
View File
@@ -346,26 +346,6 @@ METHOD(pkcs5_t, decrypt, bool,
keymat, key, iv); keymat, key, iv);
} }
/**
* Converts an ASN.1 INTEGER object to an u_int64_t. If the INTEGER is longer
* than 8 bytes only the 8 LSBs are returned.
*
* @param blob body of an ASN.1 coded integer object
* @return converted integer
*/
static u_int64_t parse_asn1_integer_uint64(chunk_t blob)
{
u_int64_t val = 0;
int i;
for (i = 0; i < blob.len; i++)
{ /* if it is longer than 8 bytes, we just use the 8 LSBs */
val <<= 8;
val |= (u_int64_t)blob.ptr[i];
}
return val;
}
/** /**
* ASN.1 definition of a PBEParameter structure * ASN.1 definition of a PBEParameter structure
*/ */
@@ -402,7 +382,7 @@ static bool parse_pbes1_params(private_pkcs5_t *this, chunk_t blob, int level0)
} }
case PBEPARAM_ITERATION_COUNT: case PBEPARAM_ITERATION_COUNT:
{ {
this->iterations = parse_asn1_integer_uint64(object); this->iterations = asn1_parse_integer_uint64(object);
break; break;
} }
} }
@@ -458,12 +438,12 @@ static bool parse_pbkdf2_params(private_pkcs5_t *this, chunk_t blob, int level0)
} }
case PBKDF2_ITERATION_COUNT: case PBKDF2_ITERATION_COUNT:
{ {
this->iterations = parse_asn1_integer_uint64(object); this->iterations = asn1_parse_integer_uint64(object);
break; break;
} }
case PBKDF2_KEYLENGTH: case PBKDF2_KEYLENGTH:
{ {
this->keylen = (size_t)parse_asn1_integer_uint64(object); this->keylen = (size_t)asn1_parse_integer_uint64(object);
break; break;
} }
case PBKDF2_PRF: case PBKDF2_PRF: