git: fdbd0ba75d99 - main - test/sys/opencrypto: Fix NIST KAT parser iterator
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 06 Oct 2022 14:52:50 UTC
The branch main has been updated by kd:
URL: https://cgit.FreeBSD.org/src/commit/?id=fdbd0ba75d99f1909b13a9f9ece5e8c576bd8977
commit fdbd0ba75d99f1909b13a9f9ece5e8c576bd8977
Author: Kornel Dulęba <kd@FreeBSD.org>
AuthorDate: 2022-10-06 14:20:58 +0000
Commit: Kornel Dulęba <kd@FreeBSD.org>
CommitDate: 2022-10-06 14:42:31 +0000
test/sys/opencrypto: Fix NIST KAT parser iterator
When yield a.k.a "generator" iterator is used we need to return all
data using "yield", before returning from the function.
Because of that only encryption tests were run for AES-CBC, other modes
were affected as well.
Add one more loop to the iterator "next" routine to fix that.
This unveiled a problem in the GCM AEAD parser logic, which didn't
correctly handle tests cases with empty plaintext, i.e. AAD only.
Include the fix in this patch as it's a rather trivial one.
Obtained from: Semihalf
Differential Revision: https://reviews.freebsd.org/D36861
---
tests/sys/opencrypto/cryptodev.py | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/tests/sys/opencrypto/cryptodev.py b/tests/sys/opencrypto/cryptodev.py
index d97a731d37ba..7e9b1f6a9fbb 100644
--- a/tests/sys/opencrypto/cryptodev.py
+++ b/tests/sys/opencrypto/cryptodev.py
@@ -38,6 +38,7 @@ from fcntl import ioctl
import os
import platform
import random
+import re
import signal
from struct import pack as _pack
import sys
@@ -258,7 +259,7 @@ class Crypto:
caead.op = op
caead.flags = CRD_F_IV_EXPLICIT
caead.flags = 0
- if src is not None and len(src) != 0:
+ if src:
src = str_to_ascii(src)
caead.len = len(src)
s = array.array('B', src)
@@ -287,7 +288,7 @@ class Crypto:
ioctl(_cryptodev, CIOCCRYPTAEAD, bytes(caead))
- if src is not None:
+ if src:
s = array_tobytes(s)
else:
s = empty_bytes()
@@ -358,6 +359,7 @@ class KATParser:
self._pending = None
self.fname = fname
self.fp = None
+ self.field_re = re.compile(r"\[(?P<field>[^]]+)\]")
def __enter__(self):
self.fp = open(self.fname)
@@ -372,24 +374,22 @@ class KATParser:
def __next__(self):
while True:
- didread = False
- if self._pending is not None:
- i = self._pending
- self._pending = None
- else:
- i = self.fp.readline()
- didread = True
-
- if didread and not i:
- return
-
- if not i.startswith('#') and i.strip():
- break
+ while True:
+ if self._pending is not None:
+ i = self._pending
+ self._pending = None
+ else:
+ i = self.fp.readline()
+ if not i:
+ return
+
+ if not i.startswith('#') and i.strip():
+ break
- if i[0] == '[':
- yield i[1:].split(']', 1)[0], self.fielditer()
- else:
- raise ValueError('unknown line: %r' % repr(i))
+ matches = self.field_re.match(i)
+ if matches is None:
+ raise ValueError("Unknown line: %r" % (i))
+ yield matches.group("field"), self.fielditer()
def eatblanks(self):
while True: