def test_short_128(self): test_vectors = load_tests("SHA3", "ShortMsgKAT_SHAKE128.txt") for result, data, desc in test_vectors: data = tobytes(data) hobj = SHAKE128.new(data=data) assert(len(result) % 2 == 0) digest = hobj.read(len(result)//2) hexdigest = "".join(["%02x" % bord(x) for x in digest]) self.assertEqual(hexdigest, result)
def get_tag_random(tag, length): return SHAKE128.new(data=tobytes(tag)).read(length)
def new_test(self, data=data, result=tv.md): hobj = SHAKE128.new(data=data) digest = hobj.read(len(result)) self.assertEqual(digest, result)
def create_rng(tag): rng = StrongRandom(SHAKE128.new(data=tag)) return rng
def get_fixed_prng(): return SHAKE128.new().update(b"SEED").read
def Sig_Gen(message, a, k, q, p, g): shake = SHAKE128.new(message) h = int.from_bytes(shake.read(q.bit_length() // 8), byteorder='big') r = pow(g, k, p) % q s = (modinv(k, q) * (h + a * r)) % q return r, s
https://colab.research.google.com/drive/1kGC-qFXHVDuewUS2wT7fsedigucQSKk- """ !pip install pycryptodome from DSA import modinv, egcd from Crypto.Hash import SHA3_256 from Crypto.Hash import SHAKE128 #-----given in the question-------- s1 = 2412874836775368230194957659405258449579579568340501217618177629780 s2 = 343379365128270720539597367095485301128970178274104846189598795161 g = 13843079639351340920273184714590884400432847093058770970775133079628015343474638985949514224469231316509301786191837239734743524804707156837615319355419215945094865320399756037490734275197507243978890158231379210099367755690209217652326933425758170008835084657241675545571324146202714002127571892258435472678396358353938476569410849475658691697420643000086724156167275855286708191941521213998074404126295230559090196852525498568126029906179168789585152438330622252753643553805877257623433974639379577436808678860489830511416186993204671106346196262903362008285485594747047950971109814842643611103016670841253194356243 p = 21844102112122237484058484990223222527816981702828279171498143036582716271485474028380542696862193720852272618397503658771128114568430034544311836848132556591324273117839115478343051538427437664722980830771161939139222964707695276957432968033365352302080366315415735532111302710857807281798249043320899027800135122873123243743524724602070457967657285884563858968187732680723369906222214201250288443824722261682828970158731587663585174032887767988219143996717380923998096794060064023264584949115354715211375168860544716843940259887168163262505413440632980952366656691935232538721726450037087263854935179798694999345517 r = 6164572993148268278544315246158794966061243456603081427389792698784 q = 18462870797958734358460540315802311963744999954506807981508498635091 message1_byte = b"He who laugh last didn't get the joke" message2_byte = b"Ask me no questions, and I'll tell you no lies" shake1 = SHAKE128.new(message1_byte) h1 = int.from_bytes(shake1.read(q.bit_length()//8), byteorder='big') shake2 = SHAKE128.new(message2_byte) h2 = int.from_bytes(shake2.read(q.bit_length()//8), byteorder='big') secondPart = r * (s1 - s2) secondPart_inv = modinv(secondPart, q) firstPart = (s2*h1 - s1*h2) % q a = (firstPart * secondPart_inv) % q print(" secret key is:", a)
def generate(self): key = self.key1 + self.key2 shake = SHAKE128.new() shake.update(key.encode()) key = shake.read(16) return key
def string_to_32_byte_key(str: str) -> bytes: shake = SHAKE128.new() shake.update(str.encode('utf-8')) return shake.read(32)