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