Skip to content

Commit e48157d

Browse files
committed
Use base64.urlsafe_b64encode() instead of manual specification of chars
This makes for better readability, and is exactly the same functionality... Pointed out by Jacob Champion
1 parent de76f82 commit e48157d

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

pgweb/account/views.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,9 @@ def communityauth(request, siteid):
729729
encryptor = AES.new(base64.b64decode(site.cryptkey), AES.MODE_SIV, nonce=nonce)
730730
cipher, tag = encryptor.encrypt_and_digest(s.encode('ascii'))
731731
redirparams = {
732-
'd': base64.b64encode(cipher, b"-_").decode('ascii'),
733-
'n': base64.b64encode(nonce, b"-_").decode('ascii'),
734-
't': base64.b64encode(tag, b"-_").decode('ascii'),
732+
'd': base64.urlsafe_b64encode(cipher),
733+
'n': base64.urlsafe_b64encode(nonce),
734+
't': base64.urlsafe_b64encode(tag),
735735
}
736736
else:
737737
# v2 = plain AES
@@ -741,8 +741,8 @@ def communityauth(request, siteid):
741741
encryptor = AES.new(base64.b64decode(site.cryptkey), AES.MODE_CBC, iv)
742742
cipher = encryptor.encrypt(s.encode('ascii') + b' ' * (16 - (len(s) % 16))) # Pad to even 16 bytes
743743
redirparams = {
744-
'i': base64.b64encode(iv, b"-_").decode('ascii'),
745-
'd': base64.b64encode(cipher, b"-_").decode('ascii'),
744+
'i': base64.urlsafe_b64encode(iv),
745+
'd': base64.urlsafe_b64encode(cipher),
746746
}
747747

748748
# Generate redirect
@@ -794,9 +794,9 @@ def _encrypt_site_response(site, s, version):
794794
cipher, tag = encryptor.encrypt_and_digest(s.encode('ascii'))
795795

796796
return "&".join((
797-
base64.b64encode(nonce, b'-_').decode('ascii'),
798-
base64.b64encode(cipher, b'-_').decode('ascii'),
799-
base64.b64encode(tag, b'-_').decode('ascii'),
797+
base64.urlsafe_b64encode(nonce).decode('ascii'),
798+
base64.urlsafe_b64encode(cipher).decode('ascii'),
799+
base64.urlsafe_b64encode(tag).decode('ascii'),
800800
))
801801
else:
802802
# Encrypt it with the shared key (and IVs)
@@ -806,8 +806,8 @@ def _encrypt_site_response(site, s, version):
806806
cipher = encryptor.encrypt(s.encode('ascii') + b' ' * (16 - (len(s) % 16))) # Pad to even 16 bytes
807807

808808
return "&".join((
809-
base64.b64encode(iv, b'-_').decode('ascii'),
810-
base64.b64encode(cipher, b'-_').decode('ascii'),
809+
base64.urlsafe_b64encode(iv).decode('ascii'),
810+
base64.urlsafe_b64encode(cipher).decode('ascii'),
811811
))
812812

813813

tools/communityauth/sample/django/auth.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ def login(request):
8383

8484
return HttpResponseRedirect("%s?%s" % (settings.PGAUTH_REDIRECT, urlencode({
8585
'd': '$'.join((
86-
base64.b64encode(nonce, b"-_").decode('utf8'),
87-
base64.b64encode(cipher, b"-_").decode('utf8'),
88-
base64.b64encode(tag, b"-_").decode('utf8'),
86+
base64.urlsafe_b64encode(nonce).decode('utf8'),
87+
base64.urlsafe_b64encode(cipher).decode('utf8'),
88+
base64.urlsafe_b64encode(tag).decode('utf8'),
8989
)),
9090
})))
9191
else:
@@ -119,11 +119,11 @@ def auth_receive(request):
119119
decryptor = AES.new(
120120
base64.b64decode(settings.PGAUTH_KEY),
121121
AES.MODE_SIV,
122-
nonce=base64.b64decode(str(request.GET['n']), "-_"),
122+
nonce=base64.urlsafe_b64decode(str(request.GET['n'])),
123123
)
124124
s = decryptor.decrypt_and_verify(
125-
base64.b64decode(str(request.GET['d']), "-_"),
126-
base64.b64decode(str(request.GET['t']), "-_"),
125+
base64.urlsafe_b64decode(str(request.GET['d'])),
126+
base64.urlsafe_b64decode(str(request.GET['t'])),
127127
).rstrip(b' ').decode('utf8')
128128
except UnicodeDecodeError:
129129
return HttpResponse("Badly encoded data found", 400)
@@ -215,11 +215,11 @@ def auth_receive(request):
215215
decryptor = AES.new(
216216
SHA256.new(settings.SECRET_KEY.encode('ascii')).digest()[:32],
217217
AES.MODE_SIV,
218-
nonce=base64.b64decode(nonces, b"-_"),
218+
nonce=base64.urlsafe_b64decode(nonces),
219219
)
220220
s = decryptor.decrypt_and_verify(
221-
base64.b64decode(datas, "-_"),
222-
base64.b64decode(tags, "-_"),
221+
base64.urlsafe_b64decode(datas),
222+
base64.urlsafe_b64decode(tags),
223223
).rstrip(b' ').decode('utf8')
224224
try:
225225
rdata = parse_qs(s, strict_parsing=True)
@@ -331,11 +331,11 @@ def user_search(searchterm=None, userid=None):
331331
decryptor = AES.new(
332332
base64.b64decode(settings.PGAUTH_KEY),
333333
AES.MODE_SIV,
334-
nonce=base64.b64decode(nonces, "-_")
334+
nonce=base64.urlsafe_b64decode(nonces)
335335
)
336336
s = decryptor.decrypt_and_verify(
337-
base64.b64decode(datas, "-_"),
338-
base64.b64decode(tags, "-_"),
337+
base64.urlsafe_b64decode(datas),
338+
base64.urlsafe_b64decode(tags),
339339
).rstrip(b' ').decode('utf8')
340340

341341
j = json.loads(s)

tools/communityauth/test_auth.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@
6363
cipher, tag = encryptor.encrypt_and_digest(s.encode('ascii'))
6464

6565
redirparams = {
66-
'd': base64.b64encode(cipher, b"-_").decode('ascii'),
67-
'n': base64.b64encode(nonce, b"-_").decode('ascii'),
68-
't': base64.b64encode(tag, b"-_").decode('ascii'),
66+
'd': base64.urlsafe_b64encode(cipher).decode('ascii'),
67+
'n': base64.urlsafe_b64encode(nonce).decode('ascii'),
68+
't': base64.urlsafe_b64encode(tag).decode('ascii'),
6969
}
7070

7171
print("Paste the following after the receiving url:")

0 commit comments

Comments
 (0)