Certificatul dvs. conține o cheie publică, P-256 sau secp256r1 sau prime256v1 pe care le puteți vedea Aici. Cu toate acestea, cheia este în format necomprimat (începând cu un octet 04
și apoi 64 de octeți care caută aleatoriu) iar parametrii domeniului sunt specificați folosind un OID cu curba menționată mai sus. Deci singurele coordonate sunt cele ale cheii publice, iar acelea sunt întotdeauna aceleași 1 + 64 de octeți; acolo nu este nici o problema.
Deci probabil că vorbiți despre R și S așa cum menționați în întrebare. Cu toate acestea, R este un număr aleator și S este semnătura aleatoare corespunzătoare, ceea ce înseamnă că nu sunt coordonate.
Acum curba nu este specificată; este specificat în certificatul de emitent la care se face referire în acesta. Cu toate acestea, putem presupune cu siguranță că este aceeași curbă despre care vorbim. Desigur, dacă construiți un verificator, atunci dvs ar trebui să totuși, recuperați curba și cheia publică din certificatul emitentului.
După cum puteți vedea în ultima parte a certificatului:
ȘIR DE BIȚI (568 de biți) 0011000001000101000000100010000000000000101000111011101011001100001001â¦
SECVENȚA (2 elemente)
INTEGER (248 biți) 2892853004106127101112322441046660521562717594643885711748150025403073â¦
INTEGER (256 biți) 1104268754670564871921027255657571260094376165878172031675520861809130â¦
Valoarea aleatorie este de 248 de biți, iar semnătura este de 256 de biți. Aceste valori trebuie pur și simplu să fie mai mici decât dimensiunea câmpului. Aceasta înseamnă că codificarea lungimii dinamice cu semn, big endian a acestor numere întregi poate diferi. Dacă aveți cod rău, atunci în acest caz componenta R poate fi mai mică decât vă așteptați; dacă ai presupune doar 256 de biți, atunci ai avea probleme.
Ceea ce trebuie să faceți este să vă asigurați că software-ul dvs. va interpreta aceste numere dacă sunt codificate ca 1 octet, ca 33 de octeți (inclusiv 00
octet de umplutură din stânga) sau orice dimensiune între ele. După aceea, este posibil să trebuiască să le recodificați ca 32 + 32 = 64 de octeți pentru ca verificarea semnăturii să funcționeze.
Sau puteți utiliza doar un software care verifică formatul semnăturii ANS X9.62, desigur. Sau folosiți o bibliotecă care acceptă pur și simplu R și S ca numere separate folosind un fel de bibliotecă „bignum”.