Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
external
mbedtls
Commits
b7de86d8
Commit
b7de86d8
authored
Jan 24, 2014
by
Manuel Pégourié-Gonnard
Browse files
More checks for length match in rsassa-pss params
parent
3c1e8b53
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
8 deletions
+45
-8
library/x509.c
library/x509.c
+45
-8
No files found.
library/x509.c
View file @
b7de86d8
...
...
@@ -178,7 +178,7 @@ static int x509_get_hash_alg( const x509_buf *alg, md_type_t *md_alg )
if
(
p
==
end
)
return
(
0
);
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_NULL
)
)
!=
0
)
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_NULL
)
)
!=
0
||
len
!=
0
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
if
(
p
!=
end
)
...
...
@@ -202,7 +202,7 @@ int x509_get_rsassa_pss_params( const x509_buf *params,
{
int
ret
;
unsigned
char
*
p
;
const
unsigned
char
*
end
;
const
unsigned
char
*
end
,
*
end2
;
size_t
len
;
x509_buf
alg_id
,
alg_params
;
...
...
@@ -223,24 +223,41 @@ int x509_get_rsassa_pss_params( const x509_buf *params,
if
(
p
==
end
)
return
(
0
);
/*
* HashAlgorithm
*/
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_CONTEXT_SPECIFIC
|
ASN1_CONSTRUCTED
|
0
)
)
==
0
)
{
end2
=
p
+
len
;
/* HashAlgorithm ::= AlgorithmIdentifier (without parameters) */
if
(
(
ret
=
x509_get_alg_null
(
&
p
,
p
+
l
en
,
&
alg_id
)
)
!=
0
)
if
(
(
ret
=
x509_get_alg_null
(
&
p
,
en
d2
,
&
alg_id
)
)
!=
0
)
return
(
ret
);
if
(
(
ret
=
oid_get_md_alg
(
&
alg_id
,
md_alg
)
)
!=
0
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
if
(
p
!=
end2
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
POLARSSL_ERR_ASN1_LENGTH_MISMATCH
);
}
else
if
(
ret
!=
POLARSSL_ERR_ASN1_UNEXPECTED_TAG
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
if
(
p
==
end
)
return
(
0
);
/*
* MaskGenAlgorithm
*/
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_CONTEXT_SPECIFIC
|
ASN1_CONSTRUCTED
|
1
)
)
==
0
)
{
end2
=
p
+
len
;
/* MaskGenAlgorithm ::= AlgorithmIdentifier (params = HashAlgorithm) */
if
(
(
ret
=
x509_get_alg
(
&
p
,
p
+
l
en
,
&
alg_id
,
&
alg_params
)
)
!=
0
)
if
(
(
ret
=
x509_get_alg
(
&
p
,
en
d2
,
&
alg_id
,
&
alg_params
)
)
!=
0
)
return
(
ret
);
/* Only MFG1 is recognised for now */
...
...
@@ -251,6 +268,10 @@ int x509_get_rsassa_pss_params( const x509_buf *params,
/* Parse HashAlgorithm */
if
(
(
ret
=
x509_get_hash_alg
(
&
alg_params
,
mgf_md
)
)
!=
0
)
return
(
ret
);
if
(
p
!=
end2
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
POLARSSL_ERR_ASN1_LENGTH_MISMATCH
);
}
else
if
(
ret
!=
POLARSSL_ERR_ASN1_UNEXPECTED_TAG
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
...
...
@@ -258,12 +279,20 @@ int x509_get_rsassa_pss_params( const x509_buf *params,
if
(
p
==
end
)
return
(
0
);
/*
* salt_len
*/
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_CONTEXT_SPECIFIC
|
ASN1_CONSTRUCTED
|
2
)
)
==
0
)
{
/* salt_len */
if
(
(
ret
=
asn1_get_int
(
&
p
,
p
+
len
,
salt_len
)
)
!=
0
)
end2
=
p
+
len
;
if
(
(
ret
=
asn1_get_int
(
&
p
,
end2
,
salt_len
)
)
!=
0
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
if
(
p
!=
end2
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
POLARSSL_ERR_ASN1_LENGTH_MISMATCH
);
}
else
if
(
ret
!=
POLARSSL_ERR_ASN1_UNEXPECTED_TAG
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
...
...
@@ -271,12 +300,20 @@ int x509_get_rsassa_pss_params( const x509_buf *params,
if
(
p
==
end
)
return
(
0
);
/*
* trailer_field
*/
if
(
(
ret
=
asn1_get_tag
(
&
p
,
end
,
&
len
,
ASN1_CONTEXT_SPECIFIC
|
ASN1_CONSTRUCTED
|
3
)
)
==
0
)
{
/* trailer_field */
if
(
(
ret
=
asn1_get_int
(
&
p
,
p
+
len
,
trailer_field
)
)
!=
0
)
end2
=
p
+
len
;
if
(
(
ret
=
asn1_get_int
(
&
p
,
end2
,
trailer_field
)
)
!=
0
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
if
(
p
!=
end2
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
POLARSSL_ERR_ASN1_LENGTH_MISMATCH
);
}
else
if
(
ret
!=
POLARSSL_ERR_ASN1_UNEXPECTED_TAG
)
return
(
POLARSSL_ERR_X509_INVALID_ALG
+
ret
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment