1/* 2 * Copyright (c) 2000-2001,2011,2014 Apple Inc. All Rights Reserved. 3 * 4 * The contents of this file constitute Original Code as defined in and are 5 * subject to the Apple Public Source License Version 1.2 (the 'License'). 6 * You may not use this file except in compliance with the License. Please obtain 7 * a copy of the License at http://www.apple.com/publicsource and read it before 8 * using this file. 9 * 10 * This Original Code and all software distributed under the License are 11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS 12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT 13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the 15 * specific language governing rights and limitations under the License. 16 */ 17 18 19/* 20 * tpTime.h - cert related time functions 21 * 22 */ 23 24#ifndef _TP_TIME_H_ 25#define _TP_TIME_H_ 26 27#include <time.h> 28#include <CoreFoundation/CoreFoundation.h> 29#include <Security/cssmtype.h> 30 31#ifdef __cplusplus 32extern "C" { 33#endif 34 35/* lengths of time strings without trailing NULL */ 36#define UTC_TIME_NOSEC_LEN 11 37#define UTC_TIME_STRLEN 13 38#define CSSM_TIME_STRLEN 14 /* no trailing 'Z' */ 39#define GENERALIZED_TIME_STRLEN 15 40#define LOCALIZED_UTC_TIME_STRLEN 17 41#define LOCALIZED_TIME_STRLEN 19 42 43/* 44 * Given a string containing either a UTC-style or "generalized time" 45 * time string, convert to a CFDateRef. Returns nonzero on 46 * error. 47 */ 48extern int timeStringToCfDate( 49 const char *str, 50 unsigned len, 51 CFDateRef *cfDate); 52 53/* 54 * Compare two times. Assumes they're both in GMT. Returns: 55 * -1 if t1 < t2 56 * 0 if t1 == t2 57 * 1 if t1 > t2 58 */ 59extern int compareTimes( 60 CFDateRef t1, 61 CFDateRef t2); 62 63/* 64 * Create a time string, in either UTC (2-digit) or or Generalized (4-digit) 65 * year format. Caller mallocs the output string whose length is at least 66 * (UTC_TIME_STRLEN+1), (GENERALIZED_TIME_STRLEN+1), or (CSSM_TIME_STRLEN+1) 67 * respectively. Caller must hold tpTimeLock. 68 */ 69typedef enum { 70 TIME_UTC, 71 TIME_GEN, 72 TIME_CSSM 73} TpTimeSpec; 74 75void timeAtNowPlus(unsigned secFromNow, 76 TpTimeSpec timeSpec, 77 char *outStr); 78 79/* 80 * Convert a time string, which can be in any of three forms (UTC, 81 * generalized, or CSSM_TIMESTRING) into a CSSM_TIMESTRING. Caller 82 * mallocs the result, which must be at least (CSSM_TIME_STRLEN+1) bytes. 83 * Returns nonzero if incoming time string is badly formed. 84 */ 85int tpTimeToCssmTimestring( 86 const char *inStr, // not necessarily NULL terminated 87 unsigned inStrLen, // not including possible NULL 88 char *outTime); // caller mallocs 89 90#ifdef __cplusplus 91} 92#endif 93 94#endif /* _TP_TIME_H_*/ 95