Loading tools/itscertgen/asn1certgen/asn1certgen.c +25 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,19 @@ static const char * const _key_formats[] = { "bin", "hex", "pem", NULL }; typedef struct { const char * cert; const char * vkey; const char * vkey_pub; const char * ekey; const char * ekey_pub; } extensions_t; #define EXT_CERT ".oer" #define EXT_VKEY ".vkey" #define EXT_EKEY ".ekey" #define EXT_PUB "_pub" static copt_t _options [] = { { "h?", "help", COPT_HELP, NULL, "Print this help page" }, { "C", "config", COPT_CFGFILE, (void*)&_cfgFile, "Config file path [no cfg file]" }, Loading @@ -55,8 +68,8 @@ static copt_t _options [] = { static int is_P384CurvePoint_empty(EccP384CurvePoint_t* point); static int is_P256CurvePoint_empty(EccP256CurvePoint_t* point); static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath); static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath); static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, char * keyPath); static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, char * keyPath); static int _issuer_parser_cb(pxml_chunk_type_e _type, const void *_chunk_data, size_t _chunk_size, void *_key) Loading Loading @@ -137,7 +150,7 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, if (sName == NULL && _cert->issuer.present == IssuerIdentifier_PR_self) sName = _profileName; char* pk = cvstrdup(_keyPath, "/", sName, ".vkey", NULL); char* pk = cvstrdup(_keyPath, "/", sName, EXT_VKEY, NULL); void *k = ecc_key_private_load(pk, alg); if (k){ char h[48]; Loading Loading @@ -291,7 +304,7 @@ int main(int argc, char ** argv) // generate keys if necessary // buf = name of private key file cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, ".vkey", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_VKEY, NULL); if (_force){ remove(buf); } Loading Loading @@ -319,7 +332,7 @@ int main(int argc, char ** argv) break; } if (cert->toBeSigned.encryptionKey){ cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, ".ekey", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_EKEY, NULL); if (_force){ remove(buf); } Loading @@ -337,7 +350,7 @@ int main(int argc, char ** argv) } } cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, ".oer", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, EXT_CERT, NULL); f = fopen(buf, "wb"); if (f == NULL){ perror(buf); Loading Loading @@ -375,7 +388,7 @@ static int is_P256CurvePoint_empty(EccP256CurvePoint_t* point) } return 1; } static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath) static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, char * keyPath) { void * key; char x[32], y[32]; Loading @@ -384,6 +397,8 @@ static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id cu if (key == NULL){ key = ecc_key_gen(curveType); ecc_key_private_save(key, keyPath, _outKeyFormat); strcat(keyPath, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); } ecc_key_public(key, x, y, &compressed_y); OCTET_STRING_fromBuf(&point->choice.x_only, x, 32); Loading @@ -410,7 +425,7 @@ static int is_P384CurvePoint_empty(EccP384CurvePoint_t* point){ return 1; } static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath) static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, char * keyPath) { void * key; char x[48], y[48]; Loading @@ -419,6 +434,8 @@ static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cu if (key == NULL){ key = ecc_key_gen(curveType); ecc_key_private_save(key, keyPath, _outKeyFormat); strcat(keyPath, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); } ecc_key_public(key, x, y, &compressed_y); OCTET_STRING_fromBuf(&point->choice.x_only, x, 48); Loading tools/itscertgen/asn1certgen/asn1certgen.vcxproj +4 −7 Original line number Diff line number Diff line Loading @@ -436,9 +436,6 @@ <ProjectReference Include="..\cshared\cshared.vcxproj"> <Project>{d5918b85-fa45-4f75-9b50-c2d3e34aba17}</Project> </ProjectReference> <ProjectReference Include="..\cxml\cxml.vcxproj"> <Project>{cbfc4bfa-fe7e-45fb-ae2f-2608b7c0ad07}</Project> </ProjectReference> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{17B446F1-6962-4B49-8A59-4584807F9024}</ProjectGuid> Loading Loading @@ -471,13 +468,13 @@ <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> <OutDir>$(SolutionDir)build\msvc\$(Configuration)\</OutDir> <IntDir>$(SolutionDir)build\msvc\$(Configuration)\$(ProjectName)\</IntDir> <OutDir>$(ProjectDir)..\build\msvc\$(Configuration)\</OutDir> <IntDir>$(ProjectDir)..\build\msvc\$(Configuration)\$(ProjectName)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> <OutDir>$(SolutionDir)build\msvc\$(Configuration)\</OutDir> <IntDir>$(SolutionDir)build\msvc\$(Configuration)\$(ProjectName)\</IntDir> <OutDir>$(ProjectDir)..\build\msvc\$(Configuration)\</OutDir> <IntDir>$(ProjectDir)..\build\msvc\$(Configuration)\$(ProjectName)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> Loading tools/itscertgen/asn1certgen/mkgmtime.c 0 → 100755 +360 −0 Original line number Diff line number Diff line // Found in DeSmuME // Alexis modified it a tad bit so it would compile as C (opposed to C++) /* lib/mkgmtime.c Copyright (C) 2010 DeSmuME team This file is part of DeSmuME DeSmuME is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. DeSmuME is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DeSmuME; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ //Taken from newlib 1.18.0 which is licensed under GPL 2 and modified for desmume /* * mktime.c * Original Author: G. Haley * * Converts the broken-down time, expressed as local time, in the structure * pointed to by tim_p into a calendar time value. The original values of the * tm_wday and tm_yday fields of the structure are ignored, and the original * values of the other fields have no restrictions. On successful completion * the fields of the structure are set to represent the specified calendar * time. Returns the specified calendar time. If the calendar time can not be * represented, returns the value (time_t) -1. * * Modifications: Fixed tm_isdst usage - 27 August 2008 Craig Howland. */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include <stdlib.h> #include <time.h> #include <stdio.h> #include "mkgmtime.h" #define _SEC_IN_MINUTE 60L #define _SEC_IN_HOUR 3600L #define _SEC_IN_DAY 86400L static const int DAYS_IN_MONTH[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; #define _DAYS_IN_MONTH(x) ((x == 1) ? days_in_feb : DAYS_IN_MONTH[x]) static const int _DAYS_BEFORE_MONTH[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; #define _ISLEAP(y) (((y) % 4) == 0 && (((y) % 100) != 0 || (((y)+1900) % 400) == 0)) #define _DAYS_IN_YEAR(year) (_ISLEAP(year) ? 366 : 365) static void validate_structure(struct tm *tim_p) { div_t res; int days_in_feb = 28; /* calculate time & date to account for out of range values */ if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59) { res = div (tim_p->tm_sec, 60); tim_p->tm_min += res.quot; if ((tim_p->tm_sec = res.rem) < 0) { tim_p->tm_sec += 60; --tim_p->tm_min; } } if (tim_p->tm_min < 0 || tim_p->tm_min > 59) { res = div (tim_p->tm_min, 60); tim_p->tm_hour += res.quot; if ((tim_p->tm_min = res.rem) < 0) { tim_p->tm_min += 60; --tim_p->tm_hour; } } if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23) { res = div (tim_p->tm_hour, 24); tim_p->tm_mday += res.quot; if ((tim_p->tm_hour = res.rem) < 0) { tim_p->tm_hour += 24; --tim_p->tm_mday; } } if (tim_p->tm_mon > 11) { res = div (tim_p->tm_mon, 12); tim_p->tm_year += res.quot; if ((tim_p->tm_mon = res.rem) < 0) { tim_p->tm_mon += 12; --tim_p->tm_year; } } if (_DAYS_IN_YEAR (tim_p->tm_year) == 366) days_in_feb = 29; if (tim_p->tm_mday <= 0) { while (tim_p->tm_mday <= 0) { if (--tim_p->tm_mon == -1) { tim_p->tm_year--; tim_p->tm_mon = 11; days_in_feb = ((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ? 29 : 28); } tim_p->tm_mday += _DAYS_IN_MONTH (tim_p->tm_mon); } } else { while (tim_p->tm_mday > _DAYS_IN_MONTH (tim_p->tm_mon)) { tim_p->tm_mday -= _DAYS_IN_MONTH (tim_p->tm_mon); if (++tim_p->tm_mon == 12) { tim_p->tm_year++; tim_p->tm_mon = 0; days_in_feb = ((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ? 29 : 28); } } } } static const unsigned long _leap_moments[] = { 1136073600, 1230768000, 1341100800, 1435708800, }; time_t addleapseconds(time_t t) { int i; for (i = 0; i < sizeof(_leap_moments) / sizeof(_leap_moments[0]); i++){ if (t < _leap_moments[i]) break; } return t + i; } time_t removeleapseconds(time_t t) { int i; for (i = 0; i < sizeof(_leap_moments) / sizeof(_leap_moments[0]); i++){ if (t < _leap_moments[i]) break; t--; } return t; } #define ITS_UTC_EPOCH 1072915200 unsigned long mkitstime32(struct tm *tim_p) { time_t ret = mktaitime(tim_p); if (ret > 0){ ret -= ITS_UTC_EPOCH; } return (unsigned long)ret; } unsigned long long mkitstime64(struct tm *tim_p) { unsigned long long ret = mktaitime64(tim_p); if (ret > 0){ ret -= ((unsigned long long)ITS_UTC_EPOCH) * 1000; } return ret; } time_t mktaitime(struct tm *tim_p) { time_t t = mkgmtime(tim_p); if (t >= 0){ t = addleapseconds(t); } return t; } unsigned long long mktaitime64(struct tm *tim_p) { time_t t = mkgmtime(tim_p); if (t >= 0){ t = addleapseconds(t); } return ((unsigned long long)t)*1000; } unsigned long unix2itstime32(time_t t) { return ((unsigned long) addleapseconds(t)) - ITS_UTC_EPOCH; } unsigned long long unix2itstime64(time_t t) { return (((unsigned long long) addleapseconds(t)) - ITS_UTC_EPOCH) * 1000; } static char _datebuf[8][16]; static int _datebufidx = 0; const char * strgmtdate(time_t t) { struct tm * tm; char * b = _datebuf[_datebufidx]; _datebufidx = (_datebufidx + 1) & 7; tm = gmtime(&t); sprintf(b, "%u-%02u-%02u", 1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday); return b; } const char * strtaidate(time_t t) { return strgmtdate(removeleapseconds(t)); } const char * stritsdate32(time_t t) { return strtaidate(t + ITS_UTC_EPOCH); } time_t mkgmtime(struct tm *tim_p) { time_t tim = 0; long days = 0; int year, isdst, tm_isdst; /* validate structure */ validate_structure (tim_p); /* compute hours, minutes, seconds */ tim += tim_p->tm_sec + (tim_p->tm_min * _SEC_IN_MINUTE) + (tim_p->tm_hour * _SEC_IN_HOUR); /* compute days in year */ days += tim_p->tm_mday - 1; days += _DAYS_BEFORE_MONTH[tim_p->tm_mon]; if (tim_p->tm_mon > 1 && _DAYS_IN_YEAR (tim_p->tm_year) == 366) days++; /* compute day of the year */ tim_p->tm_yday = days; if (tim_p->tm_year > 10000 || tim_p->tm_year < -10000) { return (time_t) -1; } /* compute days in other years */ if (tim_p->tm_year > 70) { for (year = 70; year < tim_p->tm_year; year++) days += _DAYS_IN_YEAR (year); } else if (tim_p->tm_year < 70) { for (year = 69; year > tim_p->tm_year; year--) days -= _DAYS_IN_YEAR (year); days -= _DAYS_IN_YEAR (year); } /* compute day of the week */ if ((tim_p->tm_wday = (days + 4) % 7) < 0) tim_p->tm_wday += 7; /* compute total seconds */ tim += (days * _SEC_IN_DAY); /* Convert user positive into 1 */ tm_isdst = tim_p->tm_isdst > 0 ? 1 : tim_p->tm_isdst; isdst = tm_isdst; //screw this! // if (_daylight) // { // int y = tim_p->tm_year + YEAR_BASE; // if (y == tz->__tzyear || __tzcalc_limits (y)) //{ // /* calculate start of dst in dst local time and // start of std in both std local time and dst local time */ // time_t startdst_dst = tz->__tzrule[0].change // - (time_t) tz->__tzrule[1].offset; // time_t startstd_dst = tz->__tzrule[1].change // - (time_t) tz->__tzrule[1].offset; // time_t startstd_std = tz->__tzrule[1].change // - (time_t) tz->__tzrule[0].offset; // /* if the time is in the overlap between dst and std local times */ // if (tim >= startstd_std && tim < startstd_dst) // ; /* we let user decide or leave as -1 */ // else // { // isdst = (tz->__tznorth // ? (tim >= startdst_dst && tim < startstd_std) // : (tim >= startdst_dst || tim < startstd_std)); // /* if user committed and was wrong, perform correction, but not // * if the user has given a negative value (which // * asks mktime() to determine if DST is in effect or not) */ // if (tm_isdst >= 0 && (isdst ^ tm_isdst) == 1) // { // /* we either subtract or add the difference between // time zone offsets, depending on which way the user got it // wrong. The diff is typically one hour, or 3600 seconds, // and should fit in a 16-bit int, even though offset // is a long to accomodate 12 hours. */ // int diff = (int) (tz->__tzrule[0].offset // - tz->__tzrule[1].offset); // if (!isdst) // diff = -diff; // tim_p->tm_sec += diff; // validate_structure (tim_p); // tim += diff; /* we also need to correct our current time calculation */ // } // } //} // } //screw this also /* add appropriate offset to put time in gmt format */ //if (isdst == 1) // tim += (time_t) tz->__tzrule[1].offset; //else /* otherwise assume std time */ // tim += (time_t) tz->__tzrule[0].offset; //and screw this too /* reset isdst flag to what we have calculated */ tim_p->tm_isdst = isdst; return tim; } // vim: ts=2 sw=2 et tools/itscertgen/asn1certgen/mkgmtime.h 0 → 100755 +51 −0 Original line number Diff line number Diff line /* lib/mkgmtime.h Copyright (C) 2010 DeSmuME team This file is part of DeSmuME DeSmuME is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. DeSmuME is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DeSmuME; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _MKGMTIME_H_ #define _MKGMTIME_H_ #include <time.h> #ifdef __cplusplus extern "C" { #endif extern time_t mkgmtime(struct tm *tim_p); extern time_t mktaitime(struct tm *tim_p); extern time_t addleapseconds(time_t t); #define mktaitime32(X) ((unsigned long)mktaitime(X)) extern unsigned long mkitstime32(struct tm *tim_p); extern unsigned long unix2itstime32(time_t t); extern unsigned long long mktaitime64(struct tm *tim_p); extern unsigned long long mkitstime64(struct tm *tim_p); extern unsigned long long unix2itstime64(time_t t); extern const char * stritsdate32(time_t t); extern const char * strtaidate(time_t t); extern const char * strgmtdate(time_t t); #ifdef __cplusplus } #endif #endif //_MKGMTIME_H_ tools/itscertgen/common.mk +30 −8 Original line number Diff line number Diff line Loading @@ -12,9 +12,12 @@ ALL_CONFIGURATIONS := POSIX WIN32 ifeq ($(ARCH),) ARCH = $(shell gcc -dumpmachine) GCC := gcc GPP := g++ else GCC := $(addprefix $(addsuffix -,$(ARCH)), gcc) GPP := $(addprefix $(addsuffix -,$(ARCH)), g++) endif LINK := $(GCC) ifneq ($(findstring w32,$(ARCH)),) packages := $(filter-out readline threads, $(packages)) Loading Loading @@ -99,14 +102,22 @@ predirs += $(foreach cfg,$(CFG),$(predirs-$(cfg))) postdirs += $(foreach cfg,$(CFG),$(postdirs-$(cfg))) tests := $(addprefix $(addsuffix /,$(testdir)),$(tests)) sources := $(addprefix $(addsuffix /,$(srcdir)),$(sources)) csources := $(filter %.c, $(sources)) ccsources := $(filter %.cc, $(sources)) cppsources := $(filter %.cpp, $(sources)) headers := $(addprefix $(addsuffix /,$(incdir)),$(headers)) cflags += $(addprefix -I, $(includes)) $(addprefix -D, $(defines)) outdir := $(BUILDROOT)/$(ARCH)$(dsuffix) objdir := $(outdir)/o-$(PROJECT) objects := $(patsubst %.c, $(objdir)/%.o, $(sources)) cobjects := $(patsubst %.c, $(objdir)/%.o, $(csources)) ccobjects := $(patsubst %.cc, $(objdir)/%.o, $(ccsources)) objects := $(cobjects) $(ccobjects) $(cppobjects) testbins := $(patsubst %.c, $(outdir)/%, $(tests)) dirs := $(objdir) $(outdir)/tests Loading @@ -124,6 +135,9 @@ ifneq ($(filter cshared, $(packages)),) libs += $(outdir)/libcshared.a endif ifneq (,$(sort $(ccobjects) $(cppobjects))) LINK := $(GPP) endif all: $(dirs) $(predirs) $(alibnames) $(solibnames) $(binnames) $(postdirs) Loading @@ -136,22 +150,30 @@ $(alibnames): $(outdir)/lib%.a : $(objects) ar rcs $@ $^ $(solibnames): $(outdir)/lib%.so : $(objects) $(GCC) $(cflags) -shared $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(LINK) $(cflags) -shared $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(binnames): $(outdir)/% : $(objects) $(GCC) $(cflags) $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(LINK) $(cflags) $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(testbins): $(alibnames) $(testbins): $(outdir)/tests/% : tests/%.c $(GCC) $(cflags) -o $@ $< $(alibnames) $(libs) $(LINK) $(cflags) -o $@ $< $(alibnames) $(libs) $(dirs): mkdir -p $@ $(objects): $(objdir)/%.o: %.c $(cobjects): $(objdir)/%.o: %.c @mkdir -p $(dir $@) $(GCC) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< $(ccobjects): $(objdir)/%.o: %.cc @mkdir -p $(dir $@) $(GPP) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< $(cppobjects): $(objdir)/%.o: %.cpp @mkdir -p $(dir $@) $(GPP) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< clean: rm -rf $(outdir) $(wildcard $(addsuffix /*~, . $(predirs) $(postdirs))) Loading Loading
tools/itscertgen/asn1certgen/asn1certgen.c +25 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,19 @@ static const char * const _key_formats[] = { "bin", "hex", "pem", NULL }; typedef struct { const char * cert; const char * vkey; const char * vkey_pub; const char * ekey; const char * ekey_pub; } extensions_t; #define EXT_CERT ".oer" #define EXT_VKEY ".vkey" #define EXT_EKEY ".ekey" #define EXT_PUB "_pub" static copt_t _options [] = { { "h?", "help", COPT_HELP, NULL, "Print this help page" }, { "C", "config", COPT_CFGFILE, (void*)&_cfgFile, "Config file path [no cfg file]" }, Loading @@ -55,8 +68,8 @@ static copt_t _options [] = { static int is_P384CurvePoint_empty(EccP384CurvePoint_t* point); static int is_P256CurvePoint_empty(EccP256CurvePoint_t* point); static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath); static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath); static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, char * keyPath); static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, char * keyPath); static int _issuer_parser_cb(pxml_chunk_type_e _type, const void *_chunk_data, size_t _chunk_size, void *_key) Loading Loading @@ -137,7 +150,7 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, if (sName == NULL && _cert->issuer.present == IssuerIdentifier_PR_self) sName = _profileName; char* pk = cvstrdup(_keyPath, "/", sName, ".vkey", NULL); char* pk = cvstrdup(_keyPath, "/", sName, EXT_VKEY, NULL); void *k = ecc_key_private_load(pk, alg); if (k){ char h[48]; Loading Loading @@ -291,7 +304,7 @@ int main(int argc, char ** argv) // generate keys if necessary // buf = name of private key file cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, ".vkey", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_VKEY, NULL); if (_force){ remove(buf); } Loading Loading @@ -319,7 +332,7 @@ int main(int argc, char ** argv) break; } if (cert->toBeSigned.encryptionKey){ cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, ".ekey", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_EKEY, NULL); if (_force){ remove(buf); } Loading @@ -337,7 +350,7 @@ int main(int argc, char ** argv) } } cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, ".oer", NULL); cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, EXT_CERT, NULL); f = fopen(buf, "wb"); if (f == NULL){ perror(buf); Loading Loading @@ -375,7 +388,7 @@ static int is_P256CurvePoint_empty(EccP256CurvePoint_t* point) } return 1; } static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath) static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id curveType, char * keyPath) { void * key; char x[32], y[32]; Loading @@ -384,6 +397,8 @@ static void fill_curve_point_eccP256(EccP256CurvePoint_t* point, ecc_curve_id cu if (key == NULL){ key = ecc_key_gen(curveType); ecc_key_private_save(key, keyPath, _outKeyFormat); strcat(keyPath, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); } ecc_key_public(key, x, y, &compressed_y); OCTET_STRING_fromBuf(&point->choice.x_only, x, 32); Loading @@ -410,7 +425,7 @@ static int is_P384CurvePoint_empty(EccP384CurvePoint_t* point){ return 1; } static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, const char * keyPath) static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id curveType, char * keyPath) { void * key; char x[48], y[48]; Loading @@ -419,6 +434,8 @@ static void fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cu if (key == NULL){ key = ecc_key_gen(curveType); ecc_key_private_save(key, keyPath, _outKeyFormat); strcat(keyPath, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); } ecc_key_public(key, x, y, &compressed_y); OCTET_STRING_fromBuf(&point->choice.x_only, x, 48); Loading
tools/itscertgen/asn1certgen/asn1certgen.vcxproj +4 −7 Original line number Diff line number Diff line Loading @@ -436,9 +436,6 @@ <ProjectReference Include="..\cshared\cshared.vcxproj"> <Project>{d5918b85-fa45-4f75-9b50-c2d3e34aba17}</Project> </ProjectReference> <ProjectReference Include="..\cxml\cxml.vcxproj"> <Project>{cbfc4bfa-fe7e-45fb-ae2f-2608b7c0ad07}</Project> </ProjectReference> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{17B446F1-6962-4B49-8A59-4584807F9024}</ProjectGuid> Loading Loading @@ -471,13 +468,13 @@ <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> <OutDir>$(SolutionDir)build\msvc\$(Configuration)\</OutDir> <IntDir>$(SolutionDir)build\msvc\$(Configuration)\$(ProjectName)\</IntDir> <OutDir>$(ProjectDir)..\build\msvc\$(Configuration)\</OutDir> <IntDir>$(ProjectDir)..\build\msvc\$(Configuration)\$(ProjectName)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> <OutDir>$(SolutionDir)build\msvc\$(Configuration)\</OutDir> <IntDir>$(SolutionDir)build\msvc\$(Configuration)\$(ProjectName)\</IntDir> <OutDir>$(ProjectDir)..\build\msvc\$(Configuration)\</OutDir> <IntDir>$(ProjectDir)..\build\msvc\$(Configuration)\$(ProjectName)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> Loading
tools/itscertgen/asn1certgen/mkgmtime.c 0 → 100755 +360 −0 Original line number Diff line number Diff line // Found in DeSmuME // Alexis modified it a tad bit so it would compile as C (opposed to C++) /* lib/mkgmtime.c Copyright (C) 2010 DeSmuME team This file is part of DeSmuME DeSmuME is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. DeSmuME is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DeSmuME; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ //Taken from newlib 1.18.0 which is licensed under GPL 2 and modified for desmume /* * mktime.c * Original Author: G. Haley * * Converts the broken-down time, expressed as local time, in the structure * pointed to by tim_p into a calendar time value. The original values of the * tm_wday and tm_yday fields of the structure are ignored, and the original * values of the other fields have no restrictions. On successful completion * the fields of the structure are set to represent the specified calendar * time. Returns the specified calendar time. If the calendar time can not be * represented, returns the value (time_t) -1. * * Modifications: Fixed tm_isdst usage - 27 August 2008 Craig Howland. */ #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif #include <stdlib.h> #include <time.h> #include <stdio.h> #include "mkgmtime.h" #define _SEC_IN_MINUTE 60L #define _SEC_IN_HOUR 3600L #define _SEC_IN_DAY 86400L static const int DAYS_IN_MONTH[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; #define _DAYS_IN_MONTH(x) ((x == 1) ? days_in_feb : DAYS_IN_MONTH[x]) static const int _DAYS_BEFORE_MONTH[12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; #define _ISLEAP(y) (((y) % 4) == 0 && (((y) % 100) != 0 || (((y)+1900) % 400) == 0)) #define _DAYS_IN_YEAR(year) (_ISLEAP(year) ? 366 : 365) static void validate_structure(struct tm *tim_p) { div_t res; int days_in_feb = 28; /* calculate time & date to account for out of range values */ if (tim_p->tm_sec < 0 || tim_p->tm_sec > 59) { res = div (tim_p->tm_sec, 60); tim_p->tm_min += res.quot; if ((tim_p->tm_sec = res.rem) < 0) { tim_p->tm_sec += 60; --tim_p->tm_min; } } if (tim_p->tm_min < 0 || tim_p->tm_min > 59) { res = div (tim_p->tm_min, 60); tim_p->tm_hour += res.quot; if ((tim_p->tm_min = res.rem) < 0) { tim_p->tm_min += 60; --tim_p->tm_hour; } } if (tim_p->tm_hour < 0 || tim_p->tm_hour > 23) { res = div (tim_p->tm_hour, 24); tim_p->tm_mday += res.quot; if ((tim_p->tm_hour = res.rem) < 0) { tim_p->tm_hour += 24; --tim_p->tm_mday; } } if (tim_p->tm_mon > 11) { res = div (tim_p->tm_mon, 12); tim_p->tm_year += res.quot; if ((tim_p->tm_mon = res.rem) < 0) { tim_p->tm_mon += 12; --tim_p->tm_year; } } if (_DAYS_IN_YEAR (tim_p->tm_year) == 366) days_in_feb = 29; if (tim_p->tm_mday <= 0) { while (tim_p->tm_mday <= 0) { if (--tim_p->tm_mon == -1) { tim_p->tm_year--; tim_p->tm_mon = 11; days_in_feb = ((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ? 29 : 28); } tim_p->tm_mday += _DAYS_IN_MONTH (tim_p->tm_mon); } } else { while (tim_p->tm_mday > _DAYS_IN_MONTH (tim_p->tm_mon)) { tim_p->tm_mday -= _DAYS_IN_MONTH (tim_p->tm_mon); if (++tim_p->tm_mon == 12) { tim_p->tm_year++; tim_p->tm_mon = 0; days_in_feb = ((_DAYS_IN_YEAR (tim_p->tm_year) == 366) ? 29 : 28); } } } } static const unsigned long _leap_moments[] = { 1136073600, 1230768000, 1341100800, 1435708800, }; time_t addleapseconds(time_t t) { int i; for (i = 0; i < sizeof(_leap_moments) / sizeof(_leap_moments[0]); i++){ if (t < _leap_moments[i]) break; } return t + i; } time_t removeleapseconds(time_t t) { int i; for (i = 0; i < sizeof(_leap_moments) / sizeof(_leap_moments[0]); i++){ if (t < _leap_moments[i]) break; t--; } return t; } #define ITS_UTC_EPOCH 1072915200 unsigned long mkitstime32(struct tm *tim_p) { time_t ret = mktaitime(tim_p); if (ret > 0){ ret -= ITS_UTC_EPOCH; } return (unsigned long)ret; } unsigned long long mkitstime64(struct tm *tim_p) { unsigned long long ret = mktaitime64(tim_p); if (ret > 0){ ret -= ((unsigned long long)ITS_UTC_EPOCH) * 1000; } return ret; } time_t mktaitime(struct tm *tim_p) { time_t t = mkgmtime(tim_p); if (t >= 0){ t = addleapseconds(t); } return t; } unsigned long long mktaitime64(struct tm *tim_p) { time_t t = mkgmtime(tim_p); if (t >= 0){ t = addleapseconds(t); } return ((unsigned long long)t)*1000; } unsigned long unix2itstime32(time_t t) { return ((unsigned long) addleapseconds(t)) - ITS_UTC_EPOCH; } unsigned long long unix2itstime64(time_t t) { return (((unsigned long long) addleapseconds(t)) - ITS_UTC_EPOCH) * 1000; } static char _datebuf[8][16]; static int _datebufidx = 0; const char * strgmtdate(time_t t) { struct tm * tm; char * b = _datebuf[_datebufidx]; _datebufidx = (_datebufidx + 1) & 7; tm = gmtime(&t); sprintf(b, "%u-%02u-%02u", 1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday); return b; } const char * strtaidate(time_t t) { return strgmtdate(removeleapseconds(t)); } const char * stritsdate32(time_t t) { return strtaidate(t + ITS_UTC_EPOCH); } time_t mkgmtime(struct tm *tim_p) { time_t tim = 0; long days = 0; int year, isdst, tm_isdst; /* validate structure */ validate_structure (tim_p); /* compute hours, minutes, seconds */ tim += tim_p->tm_sec + (tim_p->tm_min * _SEC_IN_MINUTE) + (tim_p->tm_hour * _SEC_IN_HOUR); /* compute days in year */ days += tim_p->tm_mday - 1; days += _DAYS_BEFORE_MONTH[tim_p->tm_mon]; if (tim_p->tm_mon > 1 && _DAYS_IN_YEAR (tim_p->tm_year) == 366) days++; /* compute day of the year */ tim_p->tm_yday = days; if (tim_p->tm_year > 10000 || tim_p->tm_year < -10000) { return (time_t) -1; } /* compute days in other years */ if (tim_p->tm_year > 70) { for (year = 70; year < tim_p->tm_year; year++) days += _DAYS_IN_YEAR (year); } else if (tim_p->tm_year < 70) { for (year = 69; year > tim_p->tm_year; year--) days -= _DAYS_IN_YEAR (year); days -= _DAYS_IN_YEAR (year); } /* compute day of the week */ if ((tim_p->tm_wday = (days + 4) % 7) < 0) tim_p->tm_wday += 7; /* compute total seconds */ tim += (days * _SEC_IN_DAY); /* Convert user positive into 1 */ tm_isdst = tim_p->tm_isdst > 0 ? 1 : tim_p->tm_isdst; isdst = tm_isdst; //screw this! // if (_daylight) // { // int y = tim_p->tm_year + YEAR_BASE; // if (y == tz->__tzyear || __tzcalc_limits (y)) //{ // /* calculate start of dst in dst local time and // start of std in both std local time and dst local time */ // time_t startdst_dst = tz->__tzrule[0].change // - (time_t) tz->__tzrule[1].offset; // time_t startstd_dst = tz->__tzrule[1].change // - (time_t) tz->__tzrule[1].offset; // time_t startstd_std = tz->__tzrule[1].change // - (time_t) tz->__tzrule[0].offset; // /* if the time is in the overlap between dst and std local times */ // if (tim >= startstd_std && tim < startstd_dst) // ; /* we let user decide or leave as -1 */ // else // { // isdst = (tz->__tznorth // ? (tim >= startdst_dst && tim < startstd_std) // : (tim >= startdst_dst || tim < startstd_std)); // /* if user committed and was wrong, perform correction, but not // * if the user has given a negative value (which // * asks mktime() to determine if DST is in effect or not) */ // if (tm_isdst >= 0 && (isdst ^ tm_isdst) == 1) // { // /* we either subtract or add the difference between // time zone offsets, depending on which way the user got it // wrong. The diff is typically one hour, or 3600 seconds, // and should fit in a 16-bit int, even though offset // is a long to accomodate 12 hours. */ // int diff = (int) (tz->__tzrule[0].offset // - tz->__tzrule[1].offset); // if (!isdst) // diff = -diff; // tim_p->tm_sec += diff; // validate_structure (tim_p); // tim += diff; /* we also need to correct our current time calculation */ // } // } //} // } //screw this also /* add appropriate offset to put time in gmt format */ //if (isdst == 1) // tim += (time_t) tz->__tzrule[1].offset; //else /* otherwise assume std time */ // tim += (time_t) tz->__tzrule[0].offset; //and screw this too /* reset isdst flag to what we have calculated */ tim_p->tm_isdst = isdst; return tim; } // vim: ts=2 sw=2 et
tools/itscertgen/asn1certgen/mkgmtime.h 0 → 100755 +51 −0 Original line number Diff line number Diff line /* lib/mkgmtime.h Copyright (C) 2010 DeSmuME team This file is part of DeSmuME DeSmuME is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. DeSmuME is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with DeSmuME; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _MKGMTIME_H_ #define _MKGMTIME_H_ #include <time.h> #ifdef __cplusplus extern "C" { #endif extern time_t mkgmtime(struct tm *tim_p); extern time_t mktaitime(struct tm *tim_p); extern time_t addleapseconds(time_t t); #define mktaitime32(X) ((unsigned long)mktaitime(X)) extern unsigned long mkitstime32(struct tm *tim_p); extern unsigned long unix2itstime32(time_t t); extern unsigned long long mktaitime64(struct tm *tim_p); extern unsigned long long mkitstime64(struct tm *tim_p); extern unsigned long long unix2itstime64(time_t t); extern const char * stritsdate32(time_t t); extern const char * strtaidate(time_t t); extern const char * strgmtdate(time_t t); #ifdef __cplusplus } #endif #endif //_MKGMTIME_H_
tools/itscertgen/common.mk +30 −8 Original line number Diff line number Diff line Loading @@ -12,9 +12,12 @@ ALL_CONFIGURATIONS := POSIX WIN32 ifeq ($(ARCH),) ARCH = $(shell gcc -dumpmachine) GCC := gcc GPP := g++ else GCC := $(addprefix $(addsuffix -,$(ARCH)), gcc) GPP := $(addprefix $(addsuffix -,$(ARCH)), g++) endif LINK := $(GCC) ifneq ($(findstring w32,$(ARCH)),) packages := $(filter-out readline threads, $(packages)) Loading Loading @@ -99,14 +102,22 @@ predirs += $(foreach cfg,$(CFG),$(predirs-$(cfg))) postdirs += $(foreach cfg,$(CFG),$(postdirs-$(cfg))) tests := $(addprefix $(addsuffix /,$(testdir)),$(tests)) sources := $(addprefix $(addsuffix /,$(srcdir)),$(sources)) csources := $(filter %.c, $(sources)) ccsources := $(filter %.cc, $(sources)) cppsources := $(filter %.cpp, $(sources)) headers := $(addprefix $(addsuffix /,$(incdir)),$(headers)) cflags += $(addprefix -I, $(includes)) $(addprefix -D, $(defines)) outdir := $(BUILDROOT)/$(ARCH)$(dsuffix) objdir := $(outdir)/o-$(PROJECT) objects := $(patsubst %.c, $(objdir)/%.o, $(sources)) cobjects := $(patsubst %.c, $(objdir)/%.o, $(csources)) ccobjects := $(patsubst %.cc, $(objdir)/%.o, $(ccsources)) objects := $(cobjects) $(ccobjects) $(cppobjects) testbins := $(patsubst %.c, $(outdir)/%, $(tests)) dirs := $(objdir) $(outdir)/tests Loading @@ -124,6 +135,9 @@ ifneq ($(filter cshared, $(packages)),) libs += $(outdir)/libcshared.a endif ifneq (,$(sort $(ccobjects) $(cppobjects))) LINK := $(GPP) endif all: $(dirs) $(predirs) $(alibnames) $(solibnames) $(binnames) $(postdirs) Loading @@ -136,22 +150,30 @@ $(alibnames): $(outdir)/lib%.a : $(objects) ar rcs $@ $^ $(solibnames): $(outdir)/lib%.so : $(objects) $(GCC) $(cflags) -shared $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(LINK) $(cflags) -shared $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(binnames): $(outdir)/% : $(objects) $(GCC) $(cflags) $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(LINK) $(cflags) $(ldflags) -o $@ $^ $(csharedlib) $(libs) $(testbins): $(alibnames) $(testbins): $(outdir)/tests/% : tests/%.c $(GCC) $(cflags) -o $@ $< $(alibnames) $(libs) $(LINK) $(cflags) -o $@ $< $(alibnames) $(libs) $(dirs): mkdir -p $@ $(objects): $(objdir)/%.o: %.c $(cobjects): $(objdir)/%.o: %.c @mkdir -p $(dir $@) $(GCC) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< $(ccobjects): $(objdir)/%.o: %.cc @mkdir -p $(dir $@) $(GPP) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< $(cppobjects): $(objdir)/%.o: %.cpp @mkdir -p $(dir $@) $(GPP) $(cflags) -o $@ -MMD -MF $(objdir)/$*.d -c $< clean: rm -rf $(outdir) $(wildcard $(addsuffix /*~, . $(predirs) $(postdirs))) Loading