1/ SIMD-0334, di Stanislav Ladyzhenskiy, corregge il controllo syscall alt_bn128_pairing di Solana. Aggiunge un controllo di lunghezza adeguato sui byte di input per le accoppiature delle curve ellittiche, prevenendo qualsiasi uso improprio con input di dimensioni errate. Analizziamo cosa significa questo 🧵
2/ alt_bn128_pairing è una syscall per il pairing sulla curva ellittica BN128 utilizzata nelle prove a conoscenza zero. Prende in input un elenco di punti della curva. Ogni coppia di punti è lunga 192 byte, quindi gli input validi devono essere un multiplo di 192 byte.
3/ Il problema: il controllo della lunghezza utilizzava checked_rem di Rust in modo errato. checked_rem restituisce solo None in caso di divisione per zero, quindi il controllo non falliva mai con 192. Di conseguenza, la syscall di accoppiamento veniva eseguita anche se l'input non era un multiplo di 192.
4/ La soluzione: verifica che la lunghezza dell'input sia un multiplo di 192 e restituisci un errore se non lo è. Questo cattura immediatamente eventuali byte residui invece di ignorarli silenziosamente. Le modifiche al codice sono in solana-sdk e vengono fornite con Agave v3.1.0.
1,19K