예제 #1
0
 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)
예제 #2
0
def get_tag_random(tag, length):
    return SHAKE128.new(data=tobytes(tag)).read(length)
예제 #3
0
 def new_test(self, data=data, result=tv.md):
     hobj = SHAKE128.new(data=data)
     digest = hobj.read(len(result))
     self.assertEqual(digest, result)
예제 #4
0
def create_rng(tag):
    rng = StrongRandom(SHAKE128.new(data=tag))
    return rng
예제 #5
0
 def new_test(self, data=data, result=tv.md):
     hobj = SHAKE128.new(data=data)
     digest = hobj.read(len(result))
     self.assertEqual(digest, result)
예제 #6
0
def get_tag_random(tag, length):
    return SHAKE128.new(data=tobytes(tag)).read(length)
예제 #7
0
def get_fixed_prng():
    return SHAKE128.new().update(b"SEED").read
예제 #8
0
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
예제 #9
0
    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)
예제 #10
0
 def generate(self):
     key = self.key1 + self.key2
     shake = SHAKE128.new()
     shake.update(key.encode())
     key = shake.read(16)
     return key
예제 #11
0
def string_to_32_byte_key(str: str) -> bytes:
    shake = SHAKE128.new()
    shake.update(str.encode('utf-8'))
    return shake.read(32)
예제 #12
-1
def get_fixed_prng():
        return SHAKE128.new().update(b"SEED").read