mirror of
https://github.com/elseif/MikroTikPatch
synced 2026-07-17 10:39:40 +00:00
modified: npk.py
modified: patch.py
This commit is contained in:
parent
55355e6c19
commit
c4cfc235f1
46
npk.py
46
npk.py
@ -212,17 +212,7 @@ class NovaPackage(Package):
|
|||||||
import hashlib
|
import hashlib
|
||||||
from mikro import mikro_kcdsa_sign,mikro_eddsa_sign
|
from mikro import mikro_kcdsa_sign,mikro_eddsa_sign
|
||||||
build_time = os.environ['BUILD_TIME'] if 'BUILD_TIME' in os.environ else None
|
build_time = os.environ['BUILD_TIME'] if 'BUILD_TIME' in os.environ else None
|
||||||
if NpkPartID.SIGNATURE in self._parts:
|
if len(self._packages) > 0:
|
||||||
if len(self[NpkPartID.SIGNATURE].data) != 20+48+64:
|
|
||||||
self[NpkPartID.SIGNATURE].data = b'\0'*(20+48+64)
|
|
||||||
if build_time:
|
|
||||||
self[NpkPartID.NAME_INFO].data._build_time = int(build_time)
|
|
||||||
sha1_digest = self.get_digest(hashlib.new('SHA1'))
|
|
||||||
sha256_digest = self.get_digest(hashlib.new('SHA256'))
|
|
||||||
kcdsa_signature = mikro_kcdsa_sign(sha256_digest[:20],kcdsa_private_key)
|
|
||||||
eddsa_signature = mikro_eddsa_sign(sha256_digest,eddsa_private_key)
|
|
||||||
self[NpkPartID.SIGNATURE].data = sha1_digest + kcdsa_signature + eddsa_signature
|
|
||||||
else:
|
|
||||||
for package in self._packages:
|
for package in self._packages:
|
||||||
if len(package[NpkPartID.SIGNATURE].data) != 20+48+64:
|
if len(package[NpkPartID.SIGNATURE].data) != 20+48+64:
|
||||||
package[NpkPartID.SIGNATURE].data = b'\0'*(20+48+64)
|
package[NpkPartID.SIGNATURE].data = b'\0'*(20+48+64)
|
||||||
@ -233,22 +223,21 @@ class NovaPackage(Package):
|
|||||||
kcdsa_signature = mikro_kcdsa_sign(sha256_digest[:20],kcdsa_private_key)
|
kcdsa_signature = mikro_kcdsa_sign(sha256_digest[:20],kcdsa_private_key)
|
||||||
eddsa_signature = mikro_eddsa_sign(sha256_digest,eddsa_private_key)
|
eddsa_signature = mikro_eddsa_sign(sha256_digest,eddsa_private_key)
|
||||||
package[NpkPartID.SIGNATURE].data = sha1_digest + kcdsa_signature + eddsa_signature
|
package[NpkPartID.SIGNATURE].data = sha1_digest + kcdsa_signature + eddsa_signature
|
||||||
|
else:
|
||||||
|
if len(self[NpkPartID.SIGNATURE].data) != 20+48+64:
|
||||||
|
self[NpkPartID.SIGNATURE].data = b'\0'*(20+48+64)
|
||||||
|
if build_time:
|
||||||
|
self[NpkPartID.NAME_INFO].data._build_time = int(build_time)
|
||||||
|
sha1_digest = self.get_digest(hashlib.new('SHA1'))
|
||||||
|
sha256_digest = self.get_digest(hashlib.new('SHA256'))
|
||||||
|
kcdsa_signature = mikro_kcdsa_sign(sha256_digest[:20],kcdsa_private_key)
|
||||||
|
eddsa_signature = mikro_eddsa_sign(sha256_digest,eddsa_private_key)
|
||||||
|
self[NpkPartID.SIGNATURE].data = sha1_digest + kcdsa_signature + eddsa_signature
|
||||||
|
|
||||||
def verify(self,kcdsa_public_key:bytes,eddsa_public_key:bytes):
|
def verify(self,kcdsa_public_key:bytes,eddsa_public_key:bytes):
|
||||||
import hashlib
|
import hashlib
|
||||||
from mikro import mikro_kcdsa_verify,mikro_eddsa_verify
|
from mikro import mikro_kcdsa_verify,mikro_eddsa_verify
|
||||||
if NpkPartID.SIGNATURE in self._parts:
|
if len(self._packages) > 0:
|
||||||
sha1_digest = self.get_digest(hashlib.new('SHA1'))
|
|
||||||
sha256_digest = self.get_digest(hashlib.new('SHA256'))
|
|
||||||
signature = self[NpkPartID.SIGNATURE].data
|
|
||||||
if sha1_digest != signature[:20]:
|
|
||||||
return False
|
|
||||||
if not mikro_kcdsa_verify(sha256_digest[:20],signature[20:68],kcdsa_public_key):
|
|
||||||
return False
|
|
||||||
if not mikro_eddsa_verify(sha256_digest,signature[68:132],eddsa_public_key):
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
for package in self._packages:
|
for package in self._packages:
|
||||||
sha1_digest = self.get_digest(hashlib.new('SHA1'),package)
|
sha1_digest = self.get_digest(hashlib.new('SHA1'),package)
|
||||||
sha256_digest = self.get_digest(hashlib.new('SHA256'),package)
|
sha256_digest = self.get_digest(hashlib.new('SHA256'),package)
|
||||||
@ -259,6 +248,17 @@ class NovaPackage(Package):
|
|||||||
return False
|
return False
|
||||||
if not mikro_eddsa_verify(sha256_digest,signature[68:132],eddsa_public_key):
|
if not mikro_eddsa_verify(sha256_digest,signature[68:132],eddsa_public_key):
|
||||||
return False
|
return False
|
||||||
|
else:
|
||||||
|
sha1_digest = self.get_digest(hashlib.new('SHA1'))
|
||||||
|
sha256_digest = self.get_digest(hashlib.new('SHA256'))
|
||||||
|
signature = self[NpkPartID.SIGNATURE].data
|
||||||
|
if sha1_digest != signature[:20]:
|
||||||
|
return False
|
||||||
|
if not mikro_kcdsa_verify(sha256_digest[:20],signature[20:68],kcdsa_public_key):
|
||||||
|
return False
|
||||||
|
if not mikro_eddsa_verify(sha256_digest,signature[68:132],eddsa_public_key):
|
||||||
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def save(self,file):
|
def save(self,file):
|
||||||
|
|||||||
9
patch.py
9
patch.py
@ -310,12 +310,13 @@ def patch_npk_package(package,key_dict,kcdsa_private_key,eddsa_private_key):
|
|||||||
run_shell_command(f"rm -f {squashfs_file}")
|
run_shell_command(f"rm -f {squashfs_file}")
|
||||||
|
|
||||||
def patch_npk_file(key_dict,kcdsa_private_key,eddsa_private_key,input_file,output_file=None):
|
def patch_npk_file(key_dict,kcdsa_private_key,eddsa_private_key,input_file,output_file=None):
|
||||||
npk = NovaPackage.load(input_file)
|
npk = NovaPackage.load(input_file)
|
||||||
if NpkPartID.NAME_INFO in npk._parts:
|
if len(npk._packages) > 0:
|
||||||
patch_npk_package(npk,key_dict,kcdsa_private_key,eddsa_private_key)
|
|
||||||
else:
|
|
||||||
for package in npk._packages:
|
for package in npk._packages:
|
||||||
patch_npk_package(package,key_dict,kcdsa_private_key,eddsa_private_key)
|
patch_npk_package(package,key_dict,kcdsa_private_key,eddsa_private_key)
|
||||||
|
else:
|
||||||
|
patch_npk_package(npk,key_dict,kcdsa_private_key,eddsa_private_key)
|
||||||
|
|
||||||
npk.sign(kcdsa_private_key,eddsa_private_key)
|
npk.sign(kcdsa_private_key,eddsa_private_key)
|
||||||
npk.save(output_file or input_file)
|
npk.save(output_file or input_file)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user