Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/pskc/serialiser.py
diff options
context:
space:
mode:
Diffstat (limited to 'pskc/serialiser.py')
-rw-r--r--pskc/serialiser.py24
1 files changed, 12 insertions, 12 deletions
diff --git a/pskc/serialiser.py b/pskc/serialiser.py
index c71f6ea..8020f60 100644
--- a/pskc/serialiser.py
+++ b/pskc/serialiser.py
@@ -90,22 +90,21 @@ class PSKCSerialiser(object):
@classmethod
def serialise_mac(cls, mac, container):
- if not mac.algorithm and not mac.key:
+ key_value = getattr(mac, '_key', None) or mac.pskc.encryption.key
+ if not mac.algorithm and not key_value:
return
mac_method = mk_elem(
container, 'pskc:MACMethod', Algorithm=mac.algorithm, empty=True)
+ # encrypt the mac key if needed
+ if not hasattr(key_value, 'get_value'):
+ key_value = EncryptedValue.create(mac.pskc, key_value)
+ # construct encrypted MACKey
+ algorithm = key_value.algorithm or mac.pskc.encryption.algorithm
mac_key = mk_elem(mac_method, 'pskc:MACKey', empty=True)
- mk_elem(
- mac_key, 'xenc:EncryptionMethod',
- Algorithm=mac.pskc.encryption.algorithm)
+ mk_elem(mac_key, 'xenc:EncryptionMethod', Algorithm=algorithm)
cipher_data = mk_elem(mac_key, 'xenc:CipherData', empty=True)
- if mac.key_cipher_value:
- mk_elem(cipher_data, 'xenc:CipherValue',
- base64.b64encode(mac.key_cipher_value).decode())
- elif mac.key_plain_value:
- mk_elem(cipher_data, 'xenc:CipherValue',
- base64.b64encode(mac.pskc.encryption.encrypt_value(
- mac.key_plain_value)).decode())
+ mk_elem(cipher_data, 'xenc:CipherValue',
+ base64.b64encode(key_value.cipher_value).decode())
@classmethod
def serialise_key_package(cls, device, container):
@@ -195,10 +194,11 @@ class PSKCSerialiser(object):
mk_elem(element, 'pskc:PlainValue', value2text(value))
else:
# encrypted value
+ algorithm = value.algorithm or pskc.encryption.algorithm
encrypted_value = mk_elem(
element, 'pskc:EncryptedValue', empty=True)
mk_elem(encrypted_value, 'xenc:EncryptionMethod',
- Algorithm=value.algorithm)
+ Algorithm=algorithm)
cipher_data = mk_elem(
encrypted_value, 'xenc:CipherData', empty=True)
mk_elem(cipher_data, 'xenc:CipherValue',