From 3401c614641d8e086eb250c1031f12fb75f41327 Mon Sep 17 00:00:00 2001 From: Jeremy Barton Date: Mon, 22 Jun 2015 09:11:49 -0700 Subject: Add methods for interacting with STACK_OF(X509) --- .../System.Security.Cryptography.Native/openssl.c | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/corefx/System.Security.Cryptography.Native/openssl.c b/src/corefx/System.Security.Cryptography.Native/openssl.c index 5dd64b23eb..e00a5fc0bf 100644 --- a/src/corefx/System.Security.Cryptography.Native/openssl.c +++ b/src/corefx/System.Security.Cryptography.Native/openssl.c @@ -623,3 +623,54 @@ GetX509NameInfo( return NULL; } + +/* +Function: +GetX509StackFieldCount + +Used by System.Security.Cryptography.X509Certificates' OpenSslX509ChainProcessor to identify the +number of certificates returned in the built chain. + +Return values: +0 if the field count cannot be determined, or the count of certificates in STACK_OF(X509) +Note that 0 does not always indicate an error, merely that GetX509StackField should not be called. +*/ +int +GetX509StackFieldCount( + STACK_OF(X509)* stack) +{ + return sk_X509_num(stack); +} + +/* +Function: +GetX509StackField + +Used by System.Security.Cryptography.X509Certificates' OpenSslX509ChainProcessor to get a pointer to +the indexed member of a chain. + +Return values: +NULL if stack is NULL or loc is out of bounds, otherwise a pointer to the X509 structure encoding +that particular element. +*/ +X509* +GetX509StackField( + STACK_OF(X509)* stack, + int loc) +{ + return sk_X509_value(stack, loc); +} + +/* +Function: +RecursiveFreeX509Stack + +Used by System.Security.Cryptography.X509Certificates' OpenSslX509ChainProcessor to free a stack +when done with it. +*/ +void +RecursiveFreeX509Stack( + STACK_OF(X509)* stack) +{ + sk_X509_pop_free(stack, X509_free); +} -- cgit v1.2.3