Skip to content

Commit acc40fd

Browse files
committed
der: reject truncated lengths in octet/implicit/constructed
1 parent 55aca78 commit acc40fd

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/ecdsa/der.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ def remove_constructed(string):
163163
)
164164
tag = s0 & 0x1F
165165
length, llen = read_length(string[1:])
166+
if length > len(string) - 1 - llen:
167+
raise UnexpectedDER("Length longer than the provided buffer")
166168
body = string[1 + llen : 1 + llen + length]
167169
rest = string[1 + llen + length :]
168170
return tag, body, rest
@@ -206,6 +208,8 @@ def remove_implicit(string, exp_class="context-specific"):
206208

207209
tag = s0 & 0x1F
208210
length, llen = read_length(string[1:])
211+
if length > len(string) - 1 - llen:
212+
raise UnexpectedDER("Length longer than the provided buffer")
209213
body = string[1 + llen : 1 + llen + length]
210214
rest = string[1 + llen + length :]
211215
return tag, body, rest
@@ -229,6 +233,8 @@ def remove_octet_string(string):
229233
n = str_idx_as_int(string, 0)
230234
raise UnexpectedDER("wanted type 'octetstring' (0x04), got 0x%02x" % n)
231235
length, llen = read_length(string[1:])
236+
if length > len(string) - 1 - llen:
237+
raise UnexpectedDER("Length longer than the provided buffer")
232238
body = string[1 + llen : 1 + llen + length]
233239
rest = string[1 + llen + length :]
234240
return body, rest

0 commit comments

Comments
 (0)