Issue42628
Created on 2020-12-12 21:23 by kwatsen2, last changed 2021-01-29 18:08 by serhiy.storchaka. This issue is now closed.
| Messages (4) | |||
|---|---|---|---|
| msg382922 - (view) | Author: Kent Watsen (kwatsen2) | Date: 2020-12-12 21:23 | |
[Tested on 3.8.2 and 3.9.0, bug may manifest in other versions too]
The IETF sometimes uses the dummy base64 value "base64encodedvalue==" in specifications in lieu of a block of otherwise meaningless b64.
Even though it is a dummy value, the value should be convertible to binary and back again. This works using the built-in command `base64` as well as OpenSSL command line, but binascii is unable to do it. See below:
$ echo "base64encodedvalue==" | base64 | base64 -d
base64encodedvalue==
$ echo "base64encodedvalue==" | openssl enc -base64 -A | openssl enc -d base64 -A
base64encodedvalue==
$ printf "import binascii\nprint(binascii.b2a_base64(binascii.a2b_base64('base64encodedvalue=='), newline=False).decode('ascii'))" | python -
base64encodedvaluQ==
After some investigation, it appears that almost any valid base64 matching the pattern "??==" fails. For instance:
$ printf "import binascii\nprint(binascii.b2a_base64(binascii.a2b_base64('ue=='), newline=False).decode('ascii'))" | python -
uQ==
$ printf "import binascii\nprint(binascii.b2a_base64(binascii.a2b_base64('aa=='), newline=False).decode('ascii'))" | python -
aQ==
$ printf "import binascii\nprint(binascii.b2a_base64(binascii.a2b_base64('a0=='), newline=False).decode('ascii'))" | python -
aw==
Is this a bug?
|
|||
| msg385537 - (view) | Author: Kent Watsen (kwatsen) | Date: 2021-01-23 13:52 | |
No activity in 3 weeks. Selecting a couple components to give it a bump. |
|||
| msg385789 - (view) | Author: Ammar Askar (ammar2) * ![]() |
Date: 2021-01-27 16:59 | |
It seems to me that your commands are just sequenced wrong, in Python you're performing (examples in parens): * base64 (ue==) -> decode to binary (0xB9) * binary (0xB9) -> encode to base64 (uQ==) whereas in your command line commands you're doing: * base64 (ue==) -> encode to double base64 (dWU9PQo=) * double base64 (dWU9PQo=) -> decoded to base64 (ue==) If we do the same thing on the command line as you're doing in Python, we get: $ echo "base64encodedvalue==" | base64 -d | base64 base64encodedvaluQ== $ echo "ue==" | base64 -d | base64 uQ== $ echo "base64encodedvalue==" | openssl enc -d -base64 -A | openssl enc -base64 -A base64encodedvaluQ== |
|||
| msg385921 - (view) | Author: Kent Watsen (kwatsen) | Date: 2021-01-29 17:19 | |
I see. There are two issues: 1) my `base64` and `openssl` CLI commands were flipped, as you point out, giving a false positive - oops ;) 2) more importantly, the base64 value "ue==" is invalid (there is no binary input that could possibly generate it) and none of the implementations issued a warning or error, which is reasonable IMO. Thank you for your help. Please close this issue. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2021-01-29 18:08:08 | serhiy.storchaka | set | status: open -> closed resolution: not a bug stage: resolved |
| 2021-01-29 17:19:56 | kwatsen | set | messages: + msg385921 |
| 2021-01-27 16:59:46 | ammar2 | set | nosy:
+ ammar2 messages: + msg385789 |
| 2021-01-23 13:52:59 | kwatsen | set | nosy:
- kwatsen2 |
| 2021-01-23 13:52:23 | kwatsen | set | nosy:
+ kwatsen messages: + msg385537 components: + Library (Lib), C API |
| 2020-12-12 21:23:18 | kwatsen2 | create | |
