FE2OSP și OS2FEP convertesc între câmp finit element (cum ar fi coordonata X sau Y a unui punct pe o curbă eliptică) și șir de octeți (echivalent șir de octeți). Ele au fost inițial definite de IEEE Std 1363-2000 și revizuită de IEEE P1363a-2004.
Câmp finit sunt seturi cu $q$ elemente notate $\operatorname{GF}(q)$ sau $\mathbb F_q$, Unde $q$ este un întreg mare al formei $q=p^m$, cu $p$ prim, și $m$ cel puțin un număr întreg $1$.
FE2OSP (Field Element to Octet String Conversion Primitive) ia ca intrare un element de câmp $x$ și dimensiunea câmpului $q$. Acesta scoate un șir de octet, de dimensiune dependentă de $q$ numai.
OS2FEP (Octet String to Field Element Conversion Primitive) ia ca intrare un șir de octet (și dimensiunea acestuia) și dimensiunea câmpului $q$. Emite un element de câmp sau o indicație de eroare.
Standardul distinge 3 cazuri:
- $m=1$, pentru așa-numitele curbe prime ca secp256k1 sau secp384r1 (de departe cea mai comună în zilele noastre). Elementul câmp $x$ este un număr întreg în $[0,p)$. Șirul de octeți corespunzător are $\left\lceil\log_2(p-1)/8\right\rceil$ octeți (octeți), reprezentând $x$ pe big-endian convenţie. Aceasta se potrivește cu conversiile efectuate de PKCS#1 I2OSP și OS2IP în RSA.
- $p=2$, pentru așa-numitele curbe binare precum secta239k1 sau secta283r1. Elementul câmp $x$ este un șir de biți de $m$ biți notate $b_i$. Șirul de octeți corespunzător are $\left\lceil m/8\right\rceil$ octeți (octeți), cu $b_0$ bitul cel mai puțin semnificativ al ultimului octet și $7-(m\bmod 8)$ cei mai semnificativi biți ai primului octet la zero.
- Altele (acoperite numai de P1363a). Elementul câmp $x$ este $m$ numere întregi $a_i\in[0,p)$. Șirul de octeți corespunzător are $\left\lceil\log_2(q-1)/8\right\rceil$ octeți (octeți), reprezentând numărul întreg $\sum_{i=0}^{m-1}a_i\,p^i$ pe big-endian convenţie. Asta face ca 1 și 2 cazuri speciale din cele 3 mai generale.
În toate cazurile, neutrul multiplicativ al câmpului ( $1$ ) este reprezentată de $\left\lceil\log_2(q-1)/8\right\rceil$ octeți (octeți), cu ultimul octet 01h iar toate celelalte 00h.
După revizuirea mea a schițelor P1363-D13 (1999) și P1363a-D12 (2003), diferențele cu cele moderne SEC1-v2lui Conversie câmp-element în octet-șir și Conversie octet-șir în element de câmp sunt minime:
- doar P1363a acoperă cazul 3.
- P1363 numește octeți $M_i$ cu $M_0$ ultimul/dreapta. SEC1 inversează acea notație (și în mod corespunzător schimbă formulele), ceea ce este mai natural pentru programatorii care văd indicele zero ca primul/stânga. Asta face nu schimbați șirul de octeți.
- „Eroarea” OS2FEP este „invalidă” pentru conversia octet-string-to-field-element.