]> Sergey Matveev's repositories - stargrave-blog.git/commit
DJB то не святой, косячит в своём Python коде
authorSergey Matveev <stargrave@stargrave.org>
Tue, 24 Aug 2021 14:56:19 +0000 (17:56 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 24 Aug 2021 14:56:19 +0000 (17:56 +0300)
commitef99b3faf2b819881f5677453e22161c1ae3cc00
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parentf0cadf30e9252fd3170447a7a27a20d29cfe7199
DJB то не святой, косячит в своём Python коде

http://ed25519.cr.yp.to/python/sign.py
В нём есть вот такая строчка, которая должна чуть-чуть изменить изменить
сообщение и убедиться что функция проверки упадёт:

    try:
        forgedm = ''.join([chr(ord(m[i])+(i==forgedmlen-1)) for i in range(len(m))])
        ed25519.checkvalid(s,forgedm,pk)
        forgedsuccess = 1
    except:
        pass
    assert not forgedsuccess

вот только проблема в том, что если значение последнего байта будет
0xFF, то... при переполнении Python будет ругаться на range(256). При
этом возникнет exception и тест посчитает что мы штатно упали, как и
ожидали. Вот не надо делать checkvalid выбрасывающим исключения, ну вот
зачем, DJB, ты это сделал?