more test coverage
This commit is contained in:
@@ -535,7 +535,7 @@ class SKESessionKeyV4(SKESessionKey):
|
||||
sk = self.__class__()
|
||||
sk.header = copy.copy(self.header)
|
||||
sk.s2k = copy.copy(self.s2k)
|
||||
sk.ct = self.ct.copy()
|
||||
sk.ct = self.ct[:]
|
||||
|
||||
return sk
|
||||
|
||||
@@ -1045,7 +1045,7 @@ class SKEData(Packet):
|
||||
|
||||
def __copy__(self):
|
||||
skd = self.__class__()
|
||||
skd.ct = self.ct.copy()
|
||||
skd.ct = self.ct[:]
|
||||
return skd
|
||||
|
||||
def parse(self, packet):
|
||||
|
||||
@@ -41,7 +41,7 @@ class Header(_Header):
|
||||
try:
|
||||
self._tag = PacketTag(_tag)
|
||||
|
||||
except ValueError:
|
||||
except ValueError: # pragma: no cover
|
||||
self._tag = _tag
|
||||
|
||||
@property
|
||||
|
||||
@@ -52,6 +52,7 @@ class TestPGPMessage(object):
|
||||
ids = {
|
||||
'test_load_from_file': [ os.path.basename(f) for f in params['msgfile'] ],
|
||||
}
|
||||
|
||||
def test_load_from_file(self, msgfile):
|
||||
# TODO: figure out a good way to verify that all went well here, because
|
||||
# PGPy reorders signatures sometimes, and also unwraps compressed messages
|
||||
|
||||
@@ -18,19 +18,16 @@ from pgpy import PGPSignature, PGPUID, PGPMessage, PGPKey
|
||||
def sig():
|
||||
return PGPSignature.from_file('tests/testdata/blocks/rsasignature.asc')
|
||||
|
||||
|
||||
def uid():
|
||||
return PGPUID.new('Abraham Lincoln', comment='Honest Abe', email='abraham.lincoln@whitehouse.gov')
|
||||
|
||||
def msg():
|
||||
return PGPMessage.from_file('tests/testdata/messages/message.signed.asc')
|
||||
|
||||
def encmsg():
|
||||
return PGPMessage.from_file('tests/testdata/messages/message.rsa.cast5.asc')
|
||||
|
||||
def key(fn):
|
||||
key, _ = PGPKey.from_file(fn)
|
||||
return key
|
||||
|
||||
|
||||
def walk_obj(obj, prefix=""):
|
||||
from enum import Enum
|
||||
|
||||
@@ -46,14 +43,15 @@ def walk_obj(obj, prefix=""):
|
||||
|
||||
|
||||
_keys = glob.glob('tests/testdata/keys/*.1.pub.asc') + glob.glob('tests/testdata/keys/*.1.sec.asc')
|
||||
_msgs = [ 'tests/testdata/messages/message.{}.asc'.format(f) for f in ['signed', 'rsa.cast5.no-mdc', 'rsa.dsa.pass.aes']]
|
||||
|
||||
|
||||
class TestCopy(object):
|
||||
params = {
|
||||
'obj': [sig(), uid(), msg(), encmsg()] + [ key(fn) for fn in _keys ],
|
||||
'obj': [sig(), uid()] + [ PGPMessage.from_file(m) for m in _msgs ] + [ key(fn) for fn in _keys ],
|
||||
}
|
||||
ids = {
|
||||
'test_copy_obj': ['sig' , 'uid', 'msg', 'encmsg'] + [ '-'.join(os.path.basename(fn).split('.')[:3]) for fn in _keys ],
|
||||
'test_copy_obj': ['sig' , 'uid'] + [ '-'.join(os.path.basename(fn).split('.')[:3]) for fn in _msgs ] + [ '-'.join(os.path.basename(fn).split('.')[:3]) for fn in _keys ],
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -500,6 +500,24 @@ class TestPGPKey(object):
|
||||
with gpg_import('./keys/ecc.1.sec.asc'):
|
||||
assert gpg_decrypt('./aemsg.asc', keyid='D01055FBCADD268E')
|
||||
|
||||
def test_encrypt_message_select_uid(self):
|
||||
# generate a temporary key with two UIDs, then encrypt a message
|
||||
u1 = PGPUID.new('UID One')
|
||||
u2 = PGPUID.new('UID Two')
|
||||
k = PGPKey.new(PubKeyAlgorithm.RSAEncryptOrSign, 512)
|
||||
|
||||
flags = {KeyFlags.Certify, KeyFlags.Sign, KeyFlags.EncryptCommunications, KeyFlags.EncryptStorage}
|
||||
|
||||
k.add_uid(u1, usage=flags, hashes=[HashAlgorithm.SHA1], ciphers=[SymmetricKeyAlgorithm.AES128])
|
||||
k.add_uid(u2, usage=flags, hashes=[HashAlgorithm.SHA1], ciphers=[SymmetricKeyAlgorithm.Camellia128])
|
||||
|
||||
emsg = k.pubkey.encrypt(PGPMessage.new('This message is about to be encrypted'), user='UID Two')
|
||||
|
||||
# assert that it was encrypted with Camellia128 and that we can decrypt it normally
|
||||
assert emsg._sessionkeys[0].decrypt_sk(k._key)[0] == SymmetricKeyAlgorithm.Camellia128
|
||||
assert k.decrypt(emsg).message == 'This message is about to be encrypted'
|
||||
|
||||
|
||||
def test_sign_timestamp(self, sec):
|
||||
with self.assert_warnings():
|
||||
sig = sec.sign(None)
|
||||
|
||||
@@ -338,6 +338,10 @@ class TestPGPKey(object):
|
||||
with pytest.raises(ValueError):
|
||||
rsa_sec.pubkey = rsa_pub
|
||||
|
||||
def test_set_pubkey_privkey(self, rsa_sec, targette_sec):
|
||||
with pytest.raises(TypeError):
|
||||
rsa_sec.pubkey = targette_sec
|
||||
|
||||
def test_add_subkey_to_pubkey(self, rsa_pub, temp_subkey):
|
||||
with pytest.raises(PGPError):
|
||||
rsa_pub.add_subkey(temp_subkey)
|
||||
|
||||
12
tests/testdata/messages/message.rsa.cast5.no-mdc.asc
vendored
Normal file
12
tests/testdata/messages/message.rsa.cast5.no-mdc.asc
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
-----BEGIN PGP MESSAGE-----
|
||||
Version: GnuPG v2
|
||||
|
||||
hQEMA+7gl6AXuXnKAQgA0erpM6LUcAWTc/wC9MLy3MnyGQMVBXl4CNM5Lzm3ON+Y
|
||||
llBiqhoYMrPFH0iX5C5hnNlF1sgxyDhHefOaGz6EUIpHYHvfLwSQg/z78cHnA3RR
|
||||
7D7C+tmJaGuBqs9B1VGNq++NrHRs8TKQF5PwAKaLotonJd+YbwgopHQxyO7uO65K
|
||||
Q/LEcmHZpIWfvZXjx8bkbT2+947F2yPw7FrhYQpODDd83aArC/SOiuaRWTk+Nh8d
|
||||
xsFxy6VQsi6Ro9iSwVNV8YCff9HJJSeOkM2Wq5lD2U8QdiDET4P5OEREwxu8K2Pu
|
||||
6iqSCM+eXHj0PBgMVnc5+diEa86iOau17bgxibPwOck/V7hRa/icZmOSjiW9Xmf8
|
||||
o/MLD4uUsUalXZBMwnLHbFD51I4BmVtgcqE3Ax4ixmjkVSJYR6TS0Q9WAQF6S0E6
|
||||
=HhJw
|
||||
-----END PGP MESSAGE-----
|
||||
Reference in New Issue
Block a user