Function fromSec1 [src]

Deserialize a SEC1-encoded point.

Prototype

pub fn fromSec1(s: []const u8) (EncodingError || NotSquareError || NonCanonicalError)!P256

Parameters

s: []const u8

Source

pub fn fromSec1(s: []const u8) (EncodingError || NotSquareError || NonCanonicalError)!P256 { if (s.len < 1) return error.InvalidEncoding; const encoding_type = s[0]; const encoded = s[1..]; switch (encoding_type) { 0 => { if (encoded.len != 0) return error.InvalidEncoding; return P256.identityElement; }, 2, 3 => { if (encoded.len != 32) return error.InvalidEncoding; const x = try Fe.fromBytes(encoded[0..32].*, .big); const y_is_odd = (encoding_type == 3); const y = try recoverY(x, y_is_odd); return P256{ .x = x, .y = y }; }, 4 => { if (encoded.len != 64) return error.InvalidEncoding; const x = try Fe.fromBytes(encoded[0..32].*, .big); const y = try Fe.fromBytes(encoded[32..64].*, .big); return P256.fromAffineCoordinates(.{ .x = x, .y = y }); }, else => return error.InvalidEncoding, } }