Distributive-Network / PythonMonkey

A Mozilla SpiderMonkey JavaScript engine embedded into the Python VM, using the Python engine to provide the JS host environment.
https://pythonmonkey.io
Other
854 stars 40 forks source link

fix: base64.py 'Incorrect padding' error #403

Closed Ciarands closed 3 months ago

Ciarands commented 3 months ago

Fix:

Update python implementation of 'atob' to properly reflect behaviour of JS 'atob' by padding the base64 with "==". https://stackoverflow.com/questions/2941995/python-ignore-incorrect-padding-error-when-base64-decoding

Motivation:

This fixes a number of JavaScript implementations for different Cryptography logic which takes advantage of atobs behavior, much of this logic doesn't take into account the padding, however Python's base64 library does. Since padding is arbitrary we can append "==" to the string before decoding. aGVsbG8gd29ybGQ -> raises binascii.Error aGVsbG8gd29ybGQ= -> hello world aGVsbG8gd29ybGQ== -> hello world aGVsbG8gd29ybGQ=== -> hello world and so on...

Examples:

Python - decode "hello world" no padding

import base64
data = "aGVsbG8gd29ybGQ"
base64.standard_b64decode(data)

binascii.Error: Incorrect padding

JavaScript - decode "hello world" no padding

atob("aGVsbG8gd29ybGQ")

'hello world'

Python - decode "hello world" with padding

import base64
data = "aGVsbG8gd29ybGQ"
base64.standard_b64decode(data + "==")

b'hello world'

Xmader commented 3 months ago

Thanks for the pull request!