Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
jovuit
funkwhale
Commits
f4f44c34
Verified
Commit
f4f44c34
authored
Mar 24, 2020
by
Eliot Berriot
Browse files
See #170: switch to PKCS#8 for public key serialization
parent
24405505
Changes
2
Hide whitespace changes
Inline
Side-by-side
api/funkwhale_api/federation/keys.py
View file @
f4f44c34
...
...
@@ -21,7 +21,8 @@ def get_key_pair(size=None):
crypto_serialization
.
NoEncryption
(),
)
public_key
=
key
.
public_key
().
public_bytes
(
crypto_serialization
.
Encoding
.
PEM
,
crypto_serialization
.
PublicFormat
.
PKCS1
crypto_serialization
.
Encoding
.
PEM
,
crypto_serialization
.
PublicFormat
.
SubjectPublicKeyInfo
,
)
return
private_key
,
public_key
...
...
api/funkwhale_api/federation/migrations/0026_public_key_format.py
0 → 100644
View file @
f4f44c34
# Generated by Django 2.0.9 on 2018-11-14 08:55
from
django.db
import
migrations
,
models
import
django.db.models.deletion
import
django.utils.timezone
def
update_public_key_format
(
apps
,
schema_editor
):
"""
Reserialize keys in proper format (PKCS#8 instead of #1)
https://github.com/friendica/friendica/issues/7771#issuecomment-603019826
"""
Actor
=
apps
.
get_model
(
"federation"
,
"Actor"
)
local_actors
=
list
(
Actor
.
objects
.
exclude
(
private_key
=
""
)
.
exclude
(
private_key
=
None
)
.
only
(
"pk"
,
"private_key"
,
"public_key"
)
.
order_by
(
"id"
)
)
total
=
len
(
local_actors
)
if
total
:
print
(
"{} keys to update..."
.
format
(
total
))
else
:
print
(
"Skipping"
)
return
from
cryptography.hazmat.primitives
import
serialization
as
crypto_serialization
from
cryptography.hazmat.backends
import
default_backend
for
actor
in
local_actors
:
private_key
=
crypto_serialization
.
load_pem_private_key
(
actor
.
private_key
.
encode
(),
password
=
None
,
backend
=
default_backend
()
)
public_key
=
private_key
.
public_key
().
public_bytes
(
crypto_serialization
.
Encoding
.
PEM
,
crypto_serialization
.
PublicFormat
.
SubjectPublicKeyInfo
,
)
actor
.
public_key
=
public_key
.
decode
()
Actor
.
objects
.
bulk_update
(
local_actors
,
[
"public_key"
])
print
(
"Done!"
)
def
skip
(
apps
,
schema_editor
):
pass
class
Migration
(
migrations
.
Migration
):
dependencies
=
[(
"federation"
,
"0025_auto_20200317_0820"
)]
operations
=
[
migrations
.
RunPython
(
update_public_key_format
,
skip
),
]
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment