Extract function to convert ASN.1 INTEGER object to u_int64_t
This commit is contained in:
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user