Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/pskc/serialiser.py
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2018-02-04 16:08:47 +0100
committerArthur de Jong <arthur@arthurdejong.org>2018-02-09 15:05:01 +0100
commitbe2b49fd90236ee16e5da3564caf3a6b227e46c8 (patch)
treedd5cf7d02046edeb69822f32ee6cd9e1faf0a944 /pskc/serialiser.py
parente60d7f3356c4808e17e363055fca23fae005f76f (diff)
Correctly write a PSKC file with a global IV
This ensures that the encryption IV, which should be per encrypted value is written out per encrypted value instead of globally. This is mostly useful for when reading an old format PSKC file and writing out a RFC 6030 compliant one.
Diffstat (limited to 'pskc/serialiser.py')
-rw-r--r--pskc/serialiser.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/pskc/serialiser.py b/pskc/serialiser.py
index 8020f60..ca6622c 100644
--- a/pskc/serialiser.py
+++ b/pskc/serialiser.py
@@ -100,11 +100,14 @@ class PSKCSerialiser(object):
key_value = EncryptedValue.create(mac.pskc, key_value)
# construct encrypted MACKey
algorithm = key_value.algorithm or mac.pskc.encryption.algorithm
+ cipher_value = key_value.cipher_value
+ if mac.pskc.encryption.iv:
+ cipher_value = mac.pskc.encryption.iv + cipher_value
mac_key = mk_elem(mac_method, 'pskc:MACKey', empty=True)
mk_elem(mac_key, 'xenc:EncryptionMethod', Algorithm=algorithm)
cipher_data = mk_elem(mac_key, 'xenc:CipherData', empty=True)
mk_elem(cipher_data, 'xenc:CipherValue',
- base64.b64encode(key_value.cipher_value).decode())
+ base64.b64encode(cipher_value).decode())
@classmethod
def serialise_key_package(cls, device, container):
@@ -195,6 +198,9 @@ class PSKCSerialiser(object):
else:
# encrypted value
algorithm = value.algorithm or pskc.encryption.algorithm
+ cipher_value = value.cipher_value
+ if pskc.encryption.iv:
+ cipher_value = pskc.encryption.iv + cipher_value
encrypted_value = mk_elem(
element, 'pskc:EncryptedValue', empty=True)
mk_elem(encrypted_value, 'xenc:EncryptionMethod',
@@ -202,7 +208,7 @@ class PSKCSerialiser(object):
cipher_data = mk_elem(
encrypted_value, 'xenc:CipherData', empty=True)
mk_elem(cipher_data, 'xenc:CipherValue',
- base64.b64encode(value.cipher_value).decode())
+ base64.b64encode(cipher_value).decode())
if value.mac_value:
mk_elem(element, 'pskc:ValueMAC',
base64.b64encode(value.mac_value).decode())