mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
Expose GNU TLS wrappers and add methods to get certificate expiry
This commit is contained in:
parent
a31506564e
commit
6f3bd6ac97
11 changed files with 111 additions and 12 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
2019-01-06 Armando Pesenti Gritti <armando.pesentigritti@theengagehub.com>
|
||||
|
||||
* Headers/GNUstepBase/GSTLS.h: Header moved to provide public
|
||||
exposure of TLS classes giving ObjC interface to GNU TLS.
|
||||
* Source/GSTLS.m: New methods to provide certificate expiry times.
|
||||
* Source/DocMakefile: Make documentation from GSTLS.h
|
||||
* Source/GNUmakefile: Install GSTLS.h
|
||||
* Source/GSHTTPURLHandle.m: Adjust location of GSTLS header
|
||||
* Source/GSSocketStream.m: Adjust location of GSTLS header
|
||||
* Source/NSFileHandle.m: Adjust location of GSTLS header
|
||||
* Source/NSURLProtocol.m: Adjust location of GSTLS header
|
||||
* Tests/base/GSTLS: Add tests for certificate expiry
|
||||
Patch by Armando, adjusted by RFM.
|
||||
|
||||
2019-01-06 Fred Kiefer <fredkiefer@gmx.de>
|
||||
|
||||
* Source/Additions/Unicode.m: Move variable u to the correct scope
|
||||
|
|
|
@ -126,6 +126,13 @@ extern NSString * const GSTLSVerify;
|
|||
*/
|
||||
- (unsigned int) count;
|
||||
|
||||
/* Return the earliest expiry date of any certificate in the list.
|
||||
*/
|
||||
- (NSDate*) expiresAt;
|
||||
|
||||
/* Return the date when a certificate in the list expires.
|
||||
*/
|
||||
- (NSDate*) expiresAt: (unsigned int)index;
|
||||
@end
|
||||
|
||||
/* This encapsulates private keys used to unlock certificates
|
|
@ -136,18 +136,19 @@ NSZone.h
|
|||
BaseAdditions_AGSDOC_FILES = \
|
||||
../Documentation/BaseAdditions.gsdoc \
|
||||
GNUstep.h \
|
||||
GCObject.h \
|
||||
GSBlocks.h \
|
||||
GSVersionMacros.h \
|
||||
GSObjCRuntime.h \
|
||||
GSUnion.h \
|
||||
GSIArray.h \
|
||||
GSIMap.h \
|
||||
GCObject.h \
|
||||
GSLocale.h \
|
||||
GSLock.h \
|
||||
GSFunctions.h \
|
||||
GSMime.h \
|
||||
GSTLS.h \
|
||||
GSXML.h \
|
||||
GSLocale.h \
|
||||
NSArray+GNUstepBase.h \
|
||||
NSAttributedString+GNUstepBase.h \
|
||||
NSBundle+GNUstepBase.h \
|
||||
|
|
|
@ -120,18 +120,19 @@ win32-def.top \
|
|||
libgnustep-base.def
|
||||
|
||||
GNUSTEPBASE_HEADERS = \
|
||||
GCObject.h \
|
||||
GSBlocks.h \
|
||||
GSVersionMacros.h \
|
||||
GSObjCRuntime.h \
|
||||
GSUnion.h \
|
||||
GSIArray.h \
|
||||
GSIMap.h \
|
||||
GCObject.h \
|
||||
GSLock.h \
|
||||
GSFunctions.h \
|
||||
GSMime.h \
|
||||
GSXML.h \
|
||||
GSLocale.h \
|
||||
GSLock.h \
|
||||
GSMime.h \
|
||||
GSTLS.h \
|
||||
GSXML.h \
|
||||
NSArray+GNUstepBase.h \
|
||||
NSAttributedString+GNUstepBase.h \
|
||||
NSBundle+GNUstepBase.h \
|
||||
|
|
|
@ -43,13 +43,13 @@
|
|||
#import "Foundation/NSValue.h"
|
||||
#import "GNUstepBase/GSMime.h"
|
||||
#import "GNUstepBase/GSLock.h"
|
||||
#import "GNUstepBase/GSTLS.h"
|
||||
#import "GNUstepBase/NSData+GNUstepBase.h"
|
||||
#import "GNUstepBase/NSString+GNUstepBase.h"
|
||||
#import "GNUstepBase/NSURL+GNUstepBase.h"
|
||||
#import "NSCallBacks.h"
|
||||
#import "GSURLPrivate.h"
|
||||
#import "GSPrivate.h"
|
||||
#import "GSTLS.h"
|
||||
|
||||
#ifdef HAVE_SYS_FILE_H
|
||||
# include <sys/file.h>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
#import "GSStream.h"
|
||||
#import "GSSocketStream.h"
|
||||
|
||||
#import "GSTLS.h"
|
||||
#import "GNUstepBase/GSTLS.h"
|
||||
|
||||
#ifndef SHUT_RD
|
||||
# ifdef SD_RECEIVE
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#import "Foundation/NSThread.h"
|
||||
#import "Foundation/NSUserDefaults.h"
|
||||
|
||||
#import "GSTLS.h"
|
||||
#import "GNUstepBase/GSTLS.h"
|
||||
|
||||
#import "GSPrivate.h"
|
||||
|
||||
|
@ -794,6 +794,61 @@ static NSMutableDictionary *certificateListCache = nil;
|
|||
return count;
|
||||
}
|
||||
|
||||
- (NSDate*) expiresAt
|
||||
{
|
||||
unsigned index = count;
|
||||
time_t expiret;
|
||||
|
||||
if (index-- == 0)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
expiret = gnutls_x509_crt_get_expiration_time(crts[index]);
|
||||
if (expiret < 0)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
while (index > 0)
|
||||
{
|
||||
time_t t = gnutls_x509_crt_get_expiration_time(crts[--index]);
|
||||
|
||||
if (t < 0)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (t < expiret)
|
||||
{
|
||||
expiret = t;
|
||||
}
|
||||
}
|
||||
|
||||
return [NSDate dateWithTimeIntervalSince1970: expiret];
|
||||
}
|
||||
|
||||
- (NSDate*) expiresAt: (unsigned)index
|
||||
{
|
||||
time_t expiret;
|
||||
|
||||
if (count == 0 || index > count - 1)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
expiret = gnutls_x509_crt_get_expiration_time(crts[index]);
|
||||
|
||||
if (expiret < 0)
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
return [NSDate dateWithTimeIntervalSince1970: expiret];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
if (nil != path)
|
||||
|
|
|
@ -32,10 +32,10 @@
|
|||
#import "Foundation/NSHost.h"
|
||||
#import "Foundation/NSFileHandle.h"
|
||||
#import "Foundation/NSPathUtilities.h"
|
||||
#import "GNUstepBase/GSTLS.h"
|
||||
#import "GNUstepBase/NSString+GNUstepBase.h"
|
||||
#import "GSPrivate.h"
|
||||
#import "GSNetwork.h"
|
||||
#import "GSTLS.h"
|
||||
|
||||
|
||||
#define EXPOSE_GSFileHandle_IVARS 1
|
||||
|
|
|
@ -2027,9 +2027,10 @@ GSRunLoopInfoForThread(NSThread *aThread)
|
|||
if (nil == lock)
|
||||
{
|
||||
NSLog(@"*** NSRunLoop ignoring exception '%@' (reason '%@') "
|
||||
@"raised during perform in other thread... with receiver %p "
|
||||
@"raised during perform in other thread... with receiver %p (%s) "
|
||||
@"and selector '%s'",
|
||||
[localException name], [localException reason], receiver,
|
||||
class_getName(object_getClass(receiver)),
|
||||
sel_getName(selector));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,9 +33,9 @@
|
|||
#import "Foundation/NSValue.h"
|
||||
|
||||
#import "GSPrivate.h"
|
||||
#import "GSTLS.h"
|
||||
#import "GSURLPrivate.h"
|
||||
#import "GNUstepBase/GSMime.h"
|
||||
#import "GNUstepBase/GSTLS.h"
|
||||
#import "GNUstepBase/NSData+GNUstepBase.h"
|
||||
#import "GNUstepBase/NSStream+GNUstepBase.h"
|
||||
#import "GNUstepBase/NSString+GNUstepBase.h"
|
||||
|
|
20
Tests/base/GSTLS/test.crt
Normal file
20
Tests/base/GSTLS/test.crt
Normal file
|
@ -0,0 +1,20 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDWTCCAkGgAwIBAgIJAMJ2jmXj+OR0MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNV
|
||||
BAYTAlVLMQ8wDQYDVQQHDAZMb25kb24xEDAOBgNVBAoMB0dOVXN0ZXAxEDAOBgNV
|
||||
BAMMB0dOVXN0ZXAwIBcNMTkwMTA3MTUzNTExWhgPMjExODEyMTQxNTM1MTFaMEIx
|
||||
CzAJBgNVBAYTAlVLMQ8wDQYDVQQHDAZMb25kb24xEDAOBgNVBAoMB0dOVXN0ZXAx
|
||||
EDAOBgNVBAMMB0dOVXN0ZXAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||
AQCqu1ged59B24uPCWxnS8QJug9yumiT0A+FqP6OF08RIf+rUArbSin5WecIYr5K
|
||||
8sQF2P4q/TlgkikEt2bVDX6+X7urn67Tu+L23Y8bPxR1eyZYxiOG2q8274vfVCat
|
||||
vPR0/uSydfK6TlxaNQbdePq+SV5dgpKujpVXzQlx0wdwseB9dYvITtifMdjCZPei
|
||||
Hnv1nD2kOMM+DPuWifgEjdnBhG5f9OzzjdtVfmkfc/ii0MnHLiynsA4vLWTZF6r7
|
||||
Jl/iXwsi7bDG4yIWzBWcW/x/R11tjEdQVxqxC/o1wCvDnMdYYuA+MkY6DjfDUn4U
|
||||
E6Uv8SAW3BVSJP7zDSdY1DH5AgMBAAGjUDBOMB0GA1UdDgQWBBTXEZM6Zc9i55VU
|
||||
4/RgT7fvHvqDBzAfBgNVHSMEGDAWgBTXEZM6Zc9i55VU4/RgT7fvHvqDBzAMBgNV
|
||||
HRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBdOmRj90oKY6FO1uS/shAEyaaz
|
||||
ReyqMO/nP6FDqLfgaFUWwgluJ7hT4PFDYachXUplXklozXJ6iivEojwqdXQPOL8a
|
||||
6iQZjXt0VJwEdszURajaP20CVCPjwE6tjpIY6v7rKtualgfPzl7wzADwtQHQc6Fh
|
||||
5oxvehwVoD9Ftjj3UCCs2jxhA5tDMyLb/quBTqdg4p4x/kzy+fTiCxdGKXITtbQv
|
||||
2XO9XyQOmjnnmL6b7MKzQOYOOk6mLG8geuoEUycbLfPCrj+J4GFFZOYcYNOr0liK
|
||||
Jahpn0NfGH1+/5MXu3no72X0oX6wGb1LxYh/5Atz2h3AIRnfU0e7pw6azvAX
|
||||
-----END CERTIFICATE-----
|
Loading…
Reference in a new issue