Edit: dacă cineva, fără experiență ca mine, ajunge la această întrebare, i s-a răspuns la stackoverflow.
De ce codul Python, vezi mai jos, returnează false?
Mai mult context: trec prin FIPS 186-4 iar la pagina 43, există un algoritm, A.2.3 Generarea canonică verificabilă a generatorului g, pentru a genera generatoare. Am scris un cod Python, vezi mai jos, care codifică acest algoritm. Cu toate acestea, returnează întotdeauna false față de datele de testare de la care am luat Vectori de testare NIST (Test Vectors, FIPS-186-4, DSA. De asemenea, am postat întregul fișier la [gist][3).
din Crypto.Hash import SHA256
P = 0xfbdf34147bf5d8a45671c906923c1dbe86e9123fae5750d6c1986e00a9946f7f833372a436f98f75dc798bb454825eb625d49011d1e4401baacb653bb9dac6cc8ac91e61ba4310458ff6d6ddabcba29db025eedba6e2f837344dee4814e2a7e2e92ceb1e6e665ee08ce187ffd420fee7a99e046a4af719fa8c689630e88f8729
Q = 0x93db61194cb0b9236eea63617d149cd6dd8e2bf1
domain_parameter_seed = 0x75709e9ca555a80cb7ab154e9d29d2775fe215d8
indice = 0xae
G = 0x7db10e27fffe43fc9582367a449f7be217130cdf89a5eff65fbebefc9478ba39ad03d1b0d0254c0f1b8246d914c0d1df25f55a5dabbb51caa1942403fdc22c832e4d7048ce0ad64cb76252fdcfaecd78722c2e10417495ee9d4e0d8376f891a3042b103de915355c0e60e168cf48c0fa232a13bf9b58a0f9b3ad7db7ad39c536
def Hash(număr):
șir = number.to_bytes((number.bit_length()+7)//8, „mare”)
return int(SHA256.new(string).hexdigest(), 16)
def compute_gen():
k = (P - 1) // Q
pentru numărarea în interval (1, 0xffff):
U = numărare + 2^16 * (index + 2^16 * (0x6767656e + 2^32 * domain_parameter_seed))
W = Hash(U)
g = pow(W, k, P)
imprimare (hex (g))
dacă g != 1:
pauză
întoarcere g
print (compute_gen() == G)