@@ -225,6 +225,30 @@ MaybeLocal<Value> GetValidToDate(Environment* env, const X509View& view) {
225225 return Date::New (env->context (), validToTime * 1000 .);
226226}
227227
228+ MaybeLocal<Value> GetSignatureAlgorithm (Environment* env,
229+ const X509View& view) {
230+ auto algo = view.getSignatureAlgorithm ();
231+ if (!algo.has_value ()) [[unlikely]]
232+ return Undefined (env->isolate ());
233+ Local<Value> ret;
234+ if (!ToV8Value (env, algo.value ()).ToLocal (&ret)) {
235+ return {};
236+ }
237+ return ret;
238+ }
239+
240+ MaybeLocal<Value> GetSignatureAlgorithmOID (Environment* env,
241+ const X509View& view) {
242+ auto oid = view.getSignatureAlgorithmOID ();
243+ if (!oid.has_value ()) [[unlikely]]
244+ return Undefined (env->isolate ());
245+ Local<Value> ret;
246+ if (!ToV8Value (env, oid.value ()).ToLocal (&ret)) {
247+ return {};
248+ }
249+ return ret;
250+ }
251+
228252MaybeLocal<Value> GetSerialNumber (Environment* env, const X509View& view) {
229253 if (auto serial = view.getSerialNumber ()) {
230254 return OneByteString (env->isolate (),
@@ -342,6 +366,26 @@ void ValidToDate(const FunctionCallbackInfo<Value>& args) {
342366 }
343367}
344368
369+ void SignatureAlgorithm (const FunctionCallbackInfo<Value>& args) {
370+ Environment* env = Environment::GetCurrent (args);
371+ X509Certificate* cert;
372+ ASSIGN_OR_RETURN_UNWRAP (&cert, args.This ());
373+ Local<Value> ret;
374+ if (GetSignatureAlgorithm (env, cert->view ()).ToLocal (&ret)) {
375+ args.GetReturnValue ().Set (ret);
376+ }
377+ }
378+
379+ void SignatureAlgorithmOID (const FunctionCallbackInfo<Value>& args) {
380+ Environment* env = Environment::GetCurrent (args);
381+ X509Certificate* cert;
382+ ASSIGN_OR_RETURN_UNWRAP (&cert, args.This ());
383+ Local<Value> ret;
384+ if (GetSignatureAlgorithmOID (env, cert->view ()).ToLocal (&ret)) {
385+ args.GetReturnValue ().Set (ret);
386+ }
387+ }
388+
345389void SerialNumber (const FunctionCallbackInfo<Value>& args) {
346390 Environment* env = Environment::GetCurrent (args);
347391 X509Certificate* cert;
@@ -822,6 +866,10 @@ Local<FunctionTemplate> X509Certificate::GetConstructorTemplate(
822866 SetProtoMethodNoSideEffect (isolate, tmpl, " validFrom" , ValidFrom);
823867 SetProtoMethodNoSideEffect (isolate, tmpl, " validToDate" , ValidToDate);
824868 SetProtoMethodNoSideEffect (isolate, tmpl, " validFromDate" , ValidFromDate);
869+ SetProtoMethodNoSideEffect (
870+ isolate, tmpl, " signatureAlgorithm" , SignatureAlgorithm);
871+ SetProtoMethodNoSideEffect (
872+ isolate, tmpl, " signatureAlgorithmOid" , SignatureAlgorithmOID);
825873 SetProtoMethodNoSideEffect (
826874 isolate, tmpl, " fingerprint" , Fingerprint<Digest::SHA1>);
827875 SetProtoMethodNoSideEffect (
@@ -996,6 +1044,8 @@ void X509Certificate::RegisterExternalReferences(
9961044 registry->Register (ValidFrom);
9971045 registry->Register (ValidToDate);
9981046 registry->Register (ValidFromDate);
1047+ registry->Register (SignatureAlgorithm);
1048+ registry->Register (SignatureAlgorithmOID);
9991049 registry->Register (Fingerprint<Digest::SHA1>);
10001050 registry->Register (Fingerprint<Digest::SHA256>);
10011051 registry->Register (Fingerprint<Digest::SHA512>);
0 commit comments