-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1. add github action for pylint 2. add api class for python vmsdk 3. add binaryblob, imr, utility for common sdk
- Loading branch information
1 parent
3374839
commit 4e5f8aa
Showing
11 changed files
with
1,322 additions
and
9 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
name: Python Code Scan | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
paths: | ||
- 'common/**/*.py' | ||
- 'vmsdk/**/*.py' | ||
pull_request: | ||
paths: | ||
- 'common/**/*.py' | ||
- 'vmsdk/**/*.py' | ||
workflow_dispatch: | ||
|
||
jobs: | ||
codescan: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- uses: actions/setup-python@v4 | ||
|
||
- name: Install dependencies | ||
run: | | ||
python3 -m pip install --upgrade pip | ||
python3 -m pip install pylint pydocstyle | ||
python3 -m pip install -r ./common/python/requirements.txt | ||
python3 -m pip install -r ./vmsdk/python/requirements.txt | ||
sudo apt update | ||
- name: Analyze python code | ||
run: | | ||
set -ex | ||
export PYTHONPATH=$PWD/cnap:$PYTHONPATH | ||
python_files=$(find ./cnap -name "*.py" -print) | ||
if [[ -n "$python_files" ]]; then | ||
echo "$python_files" | xargs -n 1 python3 -m pylint --rcfile=.github/pylintrc | ||
#echo "$python_files" | xargs -n 1 python3 -m pydocstyle --convention=google | ||
else | ||
echo "No python files found." | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,3 +50,5 @@ modules.order | |
Module.symvers | ||
Mkfile.old | ||
dkms.conf | ||
|
||
__pycache__/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
""" | ||
Manage the binary blob | ||
""" | ||
import logging | ||
import string | ||
import struct | ||
|
||
LOG = logging.getLogger(__name__) | ||
|
||
__author__ = "" | ||
|
||
|
||
class BinaryBlob: | ||
""" | ||
Manage the binary blob. | ||
""" | ||
|
||
def __init__(self, data, base=0): | ||
self._data = data | ||
self._base_address = base | ||
|
||
@property | ||
def length(self): | ||
""" | ||
Length of binary in bytes | ||
""" | ||
return len(self._data) | ||
|
||
@property | ||
def data(self): | ||
""" | ||
Raw data of binary blob | ||
""" | ||
return self._data | ||
|
||
def to_hex_string(self): | ||
""" | ||
To hex string | ||
""" | ||
return "".join(f"{b:02x}" % b for b in self._data) | ||
|
||
def get_uint16(self, pos): | ||
""" | ||
Get UINT16 integer | ||
""" | ||
assert pos + 2 <= self.length | ||
return (struct.unpack("<H", self.data[pos:pos + 2])[0], pos + 2) | ||
|
||
def get_uint8(self, pos): | ||
""" | ||
Get UINT8 integer | ||
""" | ||
assert pos + 1 <= self.length | ||
return (self.data[pos], pos + 1) | ||
|
||
def get_uint32(self, pos): | ||
""" | ||
Get UINT32 integer | ||
""" | ||
assert pos + 4 <= self.length | ||
return (struct.unpack("<L", self.data[pos:pos + 4])[0], pos + 4) | ||
|
||
def get_uint64(self, pos): | ||
""" | ||
Get UINT64 integer | ||
""" | ||
assert pos + 8 <= self.length | ||
return (struct.unpack("<Q", self.data[pos:pos + 8])[0], pos + 8) | ||
|
||
def get_bytes(self, pos, count): | ||
""" | ||
Get bytes | ||
""" | ||
if count == 0: | ||
return None | ||
assert pos + count <= self.length | ||
return (self.data[pos:pos + count], pos + count) | ||
|
||
def dump(self): | ||
""" | ||
Dump Hex value | ||
""" | ||
index = 0 | ||
linestr = "" | ||
printstr = "" | ||
|
||
while index < self.length: | ||
if (index % 16) == 0: | ||
if len(linestr) != 0: | ||
LOG.info("%s %s", linestr, printstr) | ||
printstr = '' | ||
# line prefix string | ||
# pylint: disable=consider-using-f-string | ||
linestr = "{0:08X} ".format(int(index / 16) * 16 + \ | ||
self._base_address) | ||
|
||
# pylint: disable=consider-using-f-string | ||
linestr += "{0:02X} ".format(self._data[index]) | ||
if chr(self._data[index]) in set(string.printable) and \ | ||
self._data[index] not in [0xC, 0xB, 0xA, 0xD, 0x9]: | ||
printstr += chr(self._data[index]) | ||
else: | ||
printstr += '.' | ||
|
||
index += 1 | ||
|
||
if (index % 16) != 0: | ||
blank = "" | ||
for _ in range(16 - index % 16): | ||
blank = blank + " " | ||
LOG.info("%s%s %s", linestr, blank, printstr) | ||
elif index == self.length: | ||
LOG.info("%s %s", linestr, printstr) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
""" | ||
Integrated Measurement Register packages. | ||
""" | ||
from abc import ABC, abstractmethod | ||
|
||
class TcgAlgorithmRegistry: | ||
""" | ||
From TCG specification | ||
https://trustedcomputinggroup.org/wp-content/uploads/TCG-_Algorithm_Registry_r1p32_pub.pdf | ||
""" | ||
|
||
TPM_ALG_ERROR = 0x0 | ||
TPM_ALG_RSA = 0x1 | ||
TPM_ALG_TDES = 0x3 | ||
TPM_ALG_SHA256 = 0xB | ||
TPM_ALG_SHA384 = 0xC | ||
TPM_ALG_SHA512 = 0xD | ||
|
||
TPM_ALG_TABLE = { | ||
TPM_ALG_RSA: "TPM_ALG_RSA", | ||
TPM_ALG_TDES: "TPM_ALG_TDES", | ||
TPM_ALG_SHA256: "TPM_ALG_SHA256", | ||
TPM_ALG_SHA384: "TPM_ALG_SHA384", | ||
TPM_ALG_SHA512: "TPM_ALG_SHA512" | ||
} | ||
|
||
@staticmethod | ||
def get_algorithm_string(alg_id): | ||
""" | ||
Return algorithms name from ID | ||
""" | ||
if alg_id in TcgAlgorithmRegistry.TPM_ALG_TABLE: | ||
return TcgAlgorithmRegistry.TPM_ALG_TABLE[alg_id] | ||
return "UNKNOWN" | ||
|
||
def __init__(self, alg_id): | ||
assert alg_id in TcgAlgorithmRegistry.TPM_ALG_TABLE, \ | ||
"invalid parameter alg_id" | ||
self._alg_id = alg_id | ||
|
||
class TcgDigest: | ||
""" | ||
TCG Digest | ||
""" | ||
|
||
def __init__(self, alg_id=TcgAlgorithmRegistry.TPM_ALG_SHA384): | ||
self._algorithms = TcgAlgorithmRegistry(alg_id) | ||
self._hash = [] | ||
|
||
@property | ||
def algorithms(self): | ||
return self._algorithms | ||
|
||
class TcgIMR(ABC): | ||
""" | ||
Common Integrated Measurement Register class | ||
""" | ||
|
||
_INVALID_IMR_INDEX = -1 | ||
|
||
def __init__(self): | ||
self._index = -1 | ||
self._digest = [] | ||
|
||
@property | ||
def index(self) -> int: | ||
return self._index | ||
|
||
@property | ||
def digest(self): | ||
return self._digest | ||
|
||
@abstractmethod | ||
def count(self): | ||
raise NotImplementedError("Need implemented in different arch") | ||
|
||
def is_valid(self): | ||
return | ||
|
||
class TdxRTMR(TcgIMR): | ||
|
||
def count(self): | ||
return 4 | ||
|
||
class TpmPCR(TcgIMR): | ||
|
||
def count(self): | ||
return 24 |
Oops, something went wrong.