Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › crypto › Certificate › verify_ecdsa Private Function verify_ecdsa Doc Source Private Function std.crypto.Certificate.verify_ecdsa
fn verify_ecdsa (
comptime Hash : type ,
message : []const u8 ,
encoded_sig : []const u8 ,
pub_key_algo : Parsed .PubKeyAlgo ,
sec1_pub_key : []const u8 ,
) !void Params Hash : type message : []const u8 encoded_sig : []const u8 pub_key_algo : Parsed .PubKeyAlgo sec1_pub_key : []const u8 File crypto/Certificate.zig: 859
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894 fn verify_ecdsa (
comptime Hash : type ,
message : []const u8 ,
encoded_sig : []const u8 ,
pub_key_algo : Parsed .PubKeyAlgo ,
sec1_pub_key : []const u8 ,
) !void {
const sig_named_curve = switch (pub_key_algo ) {
.X9_62_id_ecPublicKey => |named_curve | named_curve ,
else => return error .CertificateSignatureAlgorithmMismatch ,
};
switch (sig_named_curve ) {
.secp521r1 => {
return error .CertificateSignatureNamedCurveUnsupported ;
},
inline .X9_62_prime256v1 ,
.secp384r1 ,
=> |curve | {
const Ecdsa = crypto .sign .ecdsa .Ecdsa (curve .Curve (), Hash );
const sig = Ecdsa .Signature .fromDer (encoded_sig ) catch |err | switch (err ) {
error .InvalidEncoding => return error .CertificateSignatureInvalid ,
};
const pub_key = Ecdsa .PublicKey .fromSec1 (sec1_pub_key ) catch |err | switch (err ) {
error .InvalidEncoding => return error .CertificateSignatureInvalid ,
error .NonCanonical => return error .CertificateSignatureInvalid ,
error .NotSquare => return error .CertificateSignatureInvalid ,
};
sig .verify (message , pub_key ) catch |err | switch (err ) {
error .IdentityElement => return error .CertificateSignatureInvalid ,
error .NonCanonical => return error .CertificateSignatureInvalid ,
error .SignatureVerificationFailed => return error .CertificateSignatureInvalid ,
};
},
}
}