← XEdDSA & VXEdDSA/
XEdDSA & VXEdDSA · Bölüm 03 cryptography / xeddsa

3. XEdDSA

XEdDSA imzalama algoritması aşağıdaki girdileri gerektirir:

Ad Tanım
k Montgomery özel anahtarı (q modülünde tamsayı)
M İmzalanacak ileti (bayt dizisi)
Z 64 bayt güvenli rastgele veri (bayt dizisi)

Çıktı bir imzadır (R || s); bu, R bir noktayı ve s q modülünde bir tamsayıyı kodlayacak biçimde, 2b bit uzunluğunda bir bayt dizisidir.

XEdDSA doğrulama algoritması aşağıdaki girdileri gerektirir:

Ad Tanım
u Montgomery açık anahtarı (b bitlik bayt dizisi)
M Doğrulanacak ileti (bayt dizisi)
R || s Doğrulanacak imza (2b bitlik bayt dizisi)

XEdDSA doğrulaması başarılı olursa doğru döndürür; aksi takdirde yanlış döndürür. Aşağıda xeddsa_sign ve xeddsa_verify işlevleri için sözde kod verilmiştir.

xeddsa_sign(k, M, Z):
    A, a = calculate_key_pair(k)
    r = hash_1(a || M || Z) (mod q)
    R = rB
    h = hash(R || A || M) (mod q)
    s = r + ha (mod q)
    return R || s
xeddsa_verify(u, M, (R || s)):
    if u >= p or R.y >= 2^|p| or s >= 2^|q|:
        return false
    A = convert_mont(u)
    if not on_curve(A):
        return false
    h = hash(R || A || M) (mod q)
    R_check = sB - hA
    if bytes_equal(R, R_check):
        return true
    return false