1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
"""
PKCS#11 Digests
"""
import hashlib
from pkcs11 import Attribute, KeyType, Mechanism
from . import Not, TestCase, requires
class DigestTests(TestCase):
@requires(Mechanism.SHA256)
def test_digest(self):
data = "THIS IS SOME DATA TO DIGEST"
digest = self.session.digest(data, mechanism=Mechanism.SHA256)
self.assertEqual(digest, hashlib.sha256(data.encode("utf-8")).digest())
@requires(Mechanism.SHA256)
def test_digest_generator(self):
data = (
b"This is ",
b"some data ",
b"to digest.",
)
digest = self.session.digest(data, mechanism=Mechanism.SHA256)
m = hashlib.sha256()
for d in data:
m.update(d)
self.assertEqual(digest, m.digest())
@requires(Mechanism.AES_KEY_GEN, Mechanism.SHA256)
@Not.nfast # nFast can't digest keys
def test_digest_key(self):
key = self.session.generate_key(
KeyType.AES,
128,
template={
Attribute.SENSITIVE: False,
Attribute.EXTRACTABLE: True,
},
)
digest = self.session.digest(key, mechanism=Mechanism.SHA256)
self.assertEqual(digest, hashlib.sha256(key[Attribute.VALUE]).digest())
@requires(Mechanism.AES_KEY_GEN, Mechanism.SHA256)
@Not.nfast # nFast can't digest keys
def test_digest_key_data(self):
key = self.session.generate_key(
KeyType.AES,
128,
template={
Attribute.SENSITIVE: False,
Attribute.EXTRACTABLE: True,
},
)
data = (
b"Some data",
key,
)
digest = self.session.digest(data, mechanism=Mechanism.SHA256)
m = hashlib.sha256()
m.update(data[0])
m.update(data[1][Attribute.VALUE])
self.assertEqual(digest, m.digest())
@requires(Mechanism.SHA256)
def test_digest_stream_interrupt_releases_operation(self):
data = (
b"I" * 16,
b"N" * 16,
b"P" * 16,
b"U" * 16,
b"T" * 10,
)
def _data_with_error():
yield data[0]
yield data[1]
yield data[2]
raise ValueError
def attempt_digest():
self.session.digest(_data_with_error(), mechanism=Mechanism.SHA256)
self.assertRaises(ValueError, attempt_digest)
# ...try again
digest = self.session.digest(data, mechanism=Mechanism.SHA256)
m = hashlib.sha256()
for d in data:
m.update(d)
self.assertEqual(digest, m.digest())
|