Loading tools/itscertgen/asn1certgen/Makefile +1 −0 Changes for tools/itscertgen/asn1certgen/Makefile: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ bins = asn1certgen sources := asn1certgen.c ecc_openssl.c mkgmtime.c cflags += -Wno-pointer-sign -Wno-enum-compare sources-WIN32 := applink.c #sources-CYGWIN := applink.c packages += cshared openssl predirs := asncodec includes += asncodec Loading tools/itscertgen/asn1certgen/applink.c +17 −10 Changes for tools/itscertgen/asn1certgen/applink.c: 17 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -29,17 +29,24 @@ #include <stdio.h> #include <io.h> #include <fcntl.h> #ifdef _MSC_VER #define fileno _fileno #define open _open #define read _read #define write _write #define lseek _lseek #define close _close #else #include <unistd.h> #endif static void *app_stdin(void) { return stdin; } static void *app_stdout(void) { return stdout; } static void *app_stderr(void) { return stderr; } static int app_feof(FILE *fp) { return feof(fp); } static int app_ferror(FILE *fp) { return ferror(fp); } static void app_clearerr(FILE *fp) { clearerr(fp); } static int app_fileno(FILE *fp) { return _fileno(fp); } static int app_fsetmod(FILE *fp,char mod) { return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); } static int app_fileno(FILE *fp) { return fileno(fp); } static int app_fsetmod(FILE *fp,char mod) { return _setmode (fileno(fp),mod=='b'?O_BINARY:O_TEXT); } #ifdef __cplusplus extern "C" { #endif Loading Loading @@ -77,11 +84,11 @@ OPENSSL_Applink(void) OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; OPENSSL_ApplinkTable[APPLINK_READ] = _read; OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; OPENSSL_ApplinkTable[APPLINK_OPEN] = open; OPENSSL_ApplinkTable[APPLINK_READ] = read; OPENSSL_ApplinkTable[APPLINK_WRITE] = write; OPENSSL_ApplinkTable[APPLINK_LSEEK] = lseek; OPENSSL_ApplinkTable[APPLINK_CLOSE] = close; once = 0; } Loading tools/itscertgen/asn1certgen/asn1certgen.c +71 −11 Changes for tools/itscertgen/asn1certgen/asn1certgen.c: 71 added lines, 11 removed lines. Original line number Diff line number Diff line #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #include <stdio.h> #include <math.h> #include "../cshared/copts.h" #include "../cshared/cstr.h" #include "ecc_api.h" #include <ctype.h> #include "mkgmtime.h" #include "asn_application.h" #include "EtsiTs103097Certificate.h" Loading Loading @@ -139,7 +143,7 @@ static asn_enc_rval_t ToBeSignedCertificate_oer_encoder(const asn_TYPE_descripto if(_debug){ char hex[257*2]; *_bin2hex(hex, sizeof(hex)-1, oer, ((rc.encoded>256)?256:rc.encoded)) = 0; fprintf(stderr, "DEBUG: ToBeSigned OER[%ld]=%s\n", rc.encoded, hex); fprintf(stderr, "DEBUG: ToBeSigned OER[%zu]=%s\n", rc.encoded, hex); } // calculate hash if (tbs->verifyKeyIndicator.present == VerificationKeyIndicator_PR_verificationKey && Loading @@ -162,6 +166,13 @@ static ecc_curve_id _pk_type_to_curveid[] = { ecies_brainpoolp384r //Signature_PR_ecdsaBrainpoolP384r1Signature }; static const char * _pk_curve_names[] = { "nistp256", "brainpoolp256r", "brainpoolp384r", "unsupported" }; static ecc_curve_id _pk_type_to_hashid[] = { 0, sha_256, //Signature_PR_ecdsaNistP256Signature, Loading @@ -181,11 +192,21 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, const char * sName = _signerName; if (sName == NULL && _cert->issuer.present == IssuerIdentifier_PR_self) sName = _profileName; sName = _certName; char* pk = cvstrdup(_keyPath, "/", sName, EXT_VKEY, NULL); void *k = ecc_key_private_load(pk, alg); if (k){ if (k==NULL){ free(pk); pk = cvstrdup(_searchPath, "/", sName, EXT_VKEY, NULL); k = ecc_key_private_load(pk, alg); if (k==NULL){ fprintf(stderr, "%s: Private key not found\n", pk); ASN__ENCODE_FAILED; } } free(pk); char h[48]; int hl = 0; // calculate joint hash Loading Loading @@ -218,7 +239,6 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, ecc_sign(k, h, hl, s->choice.ecdsaNistP256Signature.rSig.choice.x_only.buf, s->choice.ecdsaNistP256Signature.sSig.buf); } } return asn_OP_CHOICE.oer_encoder(td, constraints, sptr, cb, app_key); } Loading @@ -238,6 +258,22 @@ static asn_dec_rval_t ServiceSpecificPermissions_oer_decoder(const struct asn_co } static int Time32_print_struct(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { int rc = NativeInteger_print(td, sptr, ilevel, cb, app_key); if(rc == 0){ const long *native = (const long *)sptr; if(native) { const char * s = stritsdate32(*native); if(s){ if(cb(" --(", 4, app_key) < 0) return -1; if(cb(s, strlen(s), app_key) < 0) return -1; if(cb(")", 1, app_key) < 0) return -1; } } } return rc; } int main(int argc, char ** argv) { // set default time to the begining of this year Loading @@ -246,7 +282,7 @@ int main(int argc, char ** argv) //parse options argc = coptions(argc, argv, COPT_HELP_NOVALUES , _options); if(argc < 2){ if(argc<0 && (0-argc)<((sizeof(_options)/sizeof(_options[0]))-1)){ if(argc<0 && (((int)0)-argc)<((sizeof(_options)/sizeof(_options[0]))-1)){ printf("Unknown option %s\n", argv[0-argc]); } const char * a = strrchr(argv[0], '/'); Loading @@ -267,6 +303,7 @@ int main(int argc, char ** argv) } if(ecc_api_init()){ fprintf(stderr, "Cannot initialize ECC engine\n"); return -1; } Loading @@ -275,6 +312,10 @@ int main(int argc, char ** argv) char * p = strrchr(_profileName, '.'); if(p) *p = 0; } if (_certName == NULL) { _certName = _profileName; } //load XER file char * buf = malloc(CERT_MAX_SIZE); Loading Loading @@ -309,12 +350,16 @@ int main(int argc, char ** argv) asn_TYPE_operation_t serviceSpecificPermissionsOps = *asn_DEF_ServiceSpecificPermissions.op; asn_DEF_ServiceSpecificPermissions.op = &serviceSpecificPermissionsOps; asn_TYPE_operation_t time32Ops = *asn_DEF_Time32.op; asn_DEF_Time32.op = &time32Ops; issuerOps.xer_decoder = IssuerIdentifier_xer_decoder; tbsOps.oer_encoder = ToBeSignedCertificate_oer_encoder; signatureOps.oer_encoder = Signature_oer_encoder; countryOnlyOps.xer_decoder = CountryOnly_xer_decoder; publicVerificationKeyOps.oer_decoder = PublicVerificationKey_oer_decoder; serviceSpecificPermissionsOps.oer_decoder = ServiceSpecificPermissions_oer_decoder; time32Ops.print_struct = Time32_print_struct; if(_view) { char hash[50], hash_hex[256]; Loading Loading @@ -448,7 +493,7 @@ int main(int argc, char ** argv) // generate keys if necessary // buf = name of private key file int rc = -1; cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_VKEY, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _certName, EXT_VKEY, NULL); switch (cert->toBeSigned.verifyKeyIndicator.present){ case VerificationKeyIndicator_PR_verificationKey: switch (cert->toBeSigned.verifyKeyIndicator.choice.verificationKey.present){ Loading @@ -463,6 +508,13 @@ int main(int argc, char ** argv) break; default: fprintf(stderr, "Unknown verification key curve type\n"); return -1; } if (rc < 0) { fprintf(stderr, "%s: Cannot prepare verification key of type %s\n", buf, asn_MBR_PublicVerificationKey_1[cert->toBeSigned.verifyKeyIndicator.choice.verificationKey.present - 1].name ); return -1; } break; case VerificationKeyIndicator_PR_reconstructionValue: Loading @@ -470,7 +522,7 @@ int main(int argc, char ** argv) break; case VerificationKeyIndicator_PR_NOTHING: default: fprintf(stderr, "Unknown verification key indicator type\n"); fprintf(stderr, "%s: Unknown verification key indicator type %d\n", buf, cert->toBeSigned.verifyKeyIndicator.present-1); break; } if (rc < 0){ Loading @@ -478,7 +530,7 @@ int main(int argc, char ** argv) } if (cert->toBeSigned.encryptionKey){ rc = -1; cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_EKEY, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _certName, EXT_EKEY, NULL); switch (cert->toBeSigned.encryptionKey->publicKey.present){ case BasePublicEncryptionKey_PR_NOTHING: cert->toBeSigned.encryptionKey->publicKey.present = BasePublicEncryptionKey_PR_eciesNistP256; Loading @@ -489,15 +541,16 @@ int main(int argc, char ** argv) rc = fill_curve_point_eccP256(&cert->toBeSigned.encryptionKey->publicKey.choice.eciesBrainpoolP256r1, ecies_brainpoolp256r, buf); break; default: fprintf(stderr, "Unknown encryption key curve type\n"); fprintf(stderr, "Unknown encryption key curve type %d\n", cert->toBeSigned.encryptionKey->publicKey.present); break; } if (rc < 0){ fprintf(stderr, "%s: Cannot prepare encryption key\n", buf); return -1; } } cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, EXT_CERT, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _certName, EXT_CERT, NULL); f = fopen(buf, "wb"); if (f == NULL){ perror(buf); Loading @@ -508,7 +561,7 @@ int main(int argc, char ** argv) // Encode as OER rc_e = asn_encode_to_buffer(NULL, ATS_CANONICAL_OER, &asn_DEF_EtsiTs103097Certificate, cert, buf, CERT_MAX_SIZE); if (rc_e.encoded <0){ fprintf(stderr, "%s: OER encoding failed for %s\n", _profileName, rc_e.failed_type->name); fprintf(stderr, "%s: OER encoding failed for %s\n", _certName, rc_e.failed_type->name); return -1; } Loading Loading @@ -570,6 +623,10 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur fprintf(stderr, "DEBUG: generate key %s\n", keyPath); } key = ecc_key_gen(curveType); if(key == NULL){ fprintf(stderr, "ERROR: key %s generation failed for curve %s\n", keyPath, _pk_curve_names[curveType & 3]); return rc; } ecc_key_private_save(key, keyPath, _outKeyFormat); strcpy(e_pub, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); Loading @@ -579,6 +636,7 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur } } } fsize = ecc_key_public(key, x, y, &compressed_y); if (fsize > 0){ OCTET_STRING_fromBuf(&point->choice.x_only, x, fsize); Loading @@ -596,6 +654,8 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur fprintf(stderr, "DEBUG: %s_pub.y=%s\n", keyPath, hex); } rc = 0; }else{ fprintf(stderr, "ERROR: %s - unknown public key\n", keyPath); } ecc_key_free(key); return rc; Loading tools/itscertgen/asn1certgen/asncodec/asn_system.h +5 −0 Changes for tools/itscertgen/asn1certgen/asncodec/asn_system.h: 5 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -138,8 +138,13 @@ typedef unsigned int uint32_t; #define ASN_PRIuMAX PRIuMAX #define ASN_PRIdMAX PRIdMAX #else #if _MSC_VER >= 1800 #define ASN_PRI_SIZE "zu" #define ASN_PRI_SSIZE "zd" #else #define ASN_PRI_SIZE "lu" #define ASN_PRI_SSIZE "ld" #endif #if LLONG_MAX > LONG_MAX #define ASN_PRIuMAX "llu" #define ASN_PRIdMAX "lld" Loading tools/itscertgen/asn1certgen/ecc_openssl.c +7 −1 Changes for tools/itscertgen/asn1certgen/ecc_openssl.c: 7 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -49,6 +49,9 @@ int ecc_api_init() int i; for (i = 0; i < ARRAYSIZE(_config); i++){ _curves[i] = EC_GROUP_new_by_curve_name(_config[i].nid); if(_curves[i] == NULL){ fprintf(stderr, "ERROR: unknown curve %s\n", _config[i].name); } } return 0; } Loading Loading @@ -459,9 +462,12 @@ int ecc_verify(void * key, const char * hash, int hlength, const char *r, con sr = BN_new(); ss = BN_new(); BN_bin2bn(r, fsize, sr); BN_bin2bn(s, fsize, ss); #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L ECDSA_SIG_set0(ecdsa, sr, ss); #else ecdsa->r = sr; ecdsa->s = ss; // ECDSA_SIG_set0(ecdsa, sr, ss); #endif rc = ECDSA_do_verify(hash, hlength, ecdsa, eckey); ECDSA_SIG_free(ecdsa); BN_free(sr); BN_free(ss); Loading Loading
tools/itscertgen/asn1certgen/Makefile +1 −0 Changes for tools/itscertgen/asn1certgen/Makefile: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ bins = asn1certgen sources := asn1certgen.c ecc_openssl.c mkgmtime.c cflags += -Wno-pointer-sign -Wno-enum-compare sources-WIN32 := applink.c #sources-CYGWIN := applink.c packages += cshared openssl predirs := asncodec includes += asncodec Loading
tools/itscertgen/asn1certgen/applink.c +17 −10 Changes for tools/itscertgen/asn1certgen/applink.c: 17 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -29,17 +29,24 @@ #include <stdio.h> #include <io.h> #include <fcntl.h> #ifdef _MSC_VER #define fileno _fileno #define open _open #define read _read #define write _write #define lseek _lseek #define close _close #else #include <unistd.h> #endif static void *app_stdin(void) { return stdin; } static void *app_stdout(void) { return stdout; } static void *app_stderr(void) { return stderr; } static int app_feof(FILE *fp) { return feof(fp); } static int app_ferror(FILE *fp) { return ferror(fp); } static void app_clearerr(FILE *fp) { clearerr(fp); } static int app_fileno(FILE *fp) { return _fileno(fp); } static int app_fsetmod(FILE *fp,char mod) { return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); } static int app_fileno(FILE *fp) { return fileno(fp); } static int app_fsetmod(FILE *fp,char mod) { return _setmode (fileno(fp),mod=='b'?O_BINARY:O_TEXT); } #ifdef __cplusplus extern "C" { #endif Loading Loading @@ -77,11 +84,11 @@ OPENSSL_Applink(void) OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; OPENSSL_ApplinkTable[APPLINK_READ] = _read; OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; OPENSSL_ApplinkTable[APPLINK_OPEN] = open; OPENSSL_ApplinkTable[APPLINK_READ] = read; OPENSSL_ApplinkTable[APPLINK_WRITE] = write; OPENSSL_ApplinkTable[APPLINK_LSEEK] = lseek; OPENSSL_ApplinkTable[APPLINK_CLOSE] = close; once = 0; } Loading
tools/itscertgen/asn1certgen/asn1certgen.c +71 −11 Changes for tools/itscertgen/asn1certgen/asn1certgen.c: 71 added lines, 11 removed lines. Original line number Diff line number Diff line #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #include <stdio.h> #include <math.h> #include "../cshared/copts.h" #include "../cshared/cstr.h" #include "ecc_api.h" #include <ctype.h> #include "mkgmtime.h" #include "asn_application.h" #include "EtsiTs103097Certificate.h" Loading Loading @@ -139,7 +143,7 @@ static asn_enc_rval_t ToBeSignedCertificate_oer_encoder(const asn_TYPE_descripto if(_debug){ char hex[257*2]; *_bin2hex(hex, sizeof(hex)-1, oer, ((rc.encoded>256)?256:rc.encoded)) = 0; fprintf(stderr, "DEBUG: ToBeSigned OER[%ld]=%s\n", rc.encoded, hex); fprintf(stderr, "DEBUG: ToBeSigned OER[%zu]=%s\n", rc.encoded, hex); } // calculate hash if (tbs->verifyKeyIndicator.present == VerificationKeyIndicator_PR_verificationKey && Loading @@ -162,6 +166,13 @@ static ecc_curve_id _pk_type_to_curveid[] = { ecies_brainpoolp384r //Signature_PR_ecdsaBrainpoolP384r1Signature }; static const char * _pk_curve_names[] = { "nistp256", "brainpoolp256r", "brainpoolp384r", "unsupported" }; static ecc_curve_id _pk_type_to_hashid[] = { 0, sha_256, //Signature_PR_ecdsaNistP256Signature, Loading @@ -181,11 +192,21 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, const char * sName = _signerName; if (sName == NULL && _cert->issuer.present == IssuerIdentifier_PR_self) sName = _profileName; sName = _certName; char* pk = cvstrdup(_keyPath, "/", sName, EXT_VKEY, NULL); void *k = ecc_key_private_load(pk, alg); if (k){ if (k==NULL){ free(pk); pk = cvstrdup(_searchPath, "/", sName, EXT_VKEY, NULL); k = ecc_key_private_load(pk, alg); if (k==NULL){ fprintf(stderr, "%s: Private key not found\n", pk); ASN__ENCODE_FAILED; } } free(pk); char h[48]; int hl = 0; // calculate joint hash Loading Loading @@ -218,7 +239,6 @@ static asn_enc_rval_t Signature_oer_encoder(const asn_TYPE_descriptor_t *td, ecc_sign(k, h, hl, s->choice.ecdsaNistP256Signature.rSig.choice.x_only.buf, s->choice.ecdsaNistP256Signature.sSig.buf); } } return asn_OP_CHOICE.oer_encoder(td, constraints, sptr, cb, app_key); } Loading @@ -238,6 +258,22 @@ static asn_dec_rval_t ServiceSpecificPermissions_oer_decoder(const struct asn_co } static int Time32_print_struct(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { int rc = NativeInteger_print(td, sptr, ilevel, cb, app_key); if(rc == 0){ const long *native = (const long *)sptr; if(native) { const char * s = stritsdate32(*native); if(s){ if(cb(" --(", 4, app_key) < 0) return -1; if(cb(s, strlen(s), app_key) < 0) return -1; if(cb(")", 1, app_key) < 0) return -1; } } } return rc; } int main(int argc, char ** argv) { // set default time to the begining of this year Loading @@ -246,7 +282,7 @@ int main(int argc, char ** argv) //parse options argc = coptions(argc, argv, COPT_HELP_NOVALUES , _options); if(argc < 2){ if(argc<0 && (0-argc)<((sizeof(_options)/sizeof(_options[0]))-1)){ if(argc<0 && (((int)0)-argc)<((sizeof(_options)/sizeof(_options[0]))-1)){ printf("Unknown option %s\n", argv[0-argc]); } const char * a = strrchr(argv[0], '/'); Loading @@ -267,6 +303,7 @@ int main(int argc, char ** argv) } if(ecc_api_init()){ fprintf(stderr, "Cannot initialize ECC engine\n"); return -1; } Loading @@ -275,6 +312,10 @@ int main(int argc, char ** argv) char * p = strrchr(_profileName, '.'); if(p) *p = 0; } if (_certName == NULL) { _certName = _profileName; } //load XER file char * buf = malloc(CERT_MAX_SIZE); Loading Loading @@ -309,12 +350,16 @@ int main(int argc, char ** argv) asn_TYPE_operation_t serviceSpecificPermissionsOps = *asn_DEF_ServiceSpecificPermissions.op; asn_DEF_ServiceSpecificPermissions.op = &serviceSpecificPermissionsOps; asn_TYPE_operation_t time32Ops = *asn_DEF_Time32.op; asn_DEF_Time32.op = &time32Ops; issuerOps.xer_decoder = IssuerIdentifier_xer_decoder; tbsOps.oer_encoder = ToBeSignedCertificate_oer_encoder; signatureOps.oer_encoder = Signature_oer_encoder; countryOnlyOps.xer_decoder = CountryOnly_xer_decoder; publicVerificationKeyOps.oer_decoder = PublicVerificationKey_oer_decoder; serviceSpecificPermissionsOps.oer_decoder = ServiceSpecificPermissions_oer_decoder; time32Ops.print_struct = Time32_print_struct; if(_view) { char hash[50], hash_hex[256]; Loading Loading @@ -448,7 +493,7 @@ int main(int argc, char ** argv) // generate keys if necessary // buf = name of private key file int rc = -1; cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_VKEY, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _certName, EXT_VKEY, NULL); switch (cert->toBeSigned.verifyKeyIndicator.present){ case VerificationKeyIndicator_PR_verificationKey: switch (cert->toBeSigned.verifyKeyIndicator.choice.verificationKey.present){ Loading @@ -463,6 +508,13 @@ int main(int argc, char ** argv) break; default: fprintf(stderr, "Unknown verification key curve type\n"); return -1; } if (rc < 0) { fprintf(stderr, "%s: Cannot prepare verification key of type %s\n", buf, asn_MBR_PublicVerificationKey_1[cert->toBeSigned.verifyKeyIndicator.choice.verificationKey.present - 1].name ); return -1; } break; case VerificationKeyIndicator_PR_reconstructionValue: Loading @@ -470,7 +522,7 @@ int main(int argc, char ** argv) break; case VerificationKeyIndicator_PR_NOTHING: default: fprintf(stderr, "Unknown verification key indicator type\n"); fprintf(stderr, "%s: Unknown verification key indicator type %d\n", buf, cert->toBeSigned.verifyKeyIndicator.present-1); break; } if (rc < 0){ Loading @@ -478,7 +530,7 @@ int main(int argc, char ** argv) } if (cert->toBeSigned.encryptionKey){ rc = -1; cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _profileName, EXT_EKEY, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _keyPath, "/", _certName, EXT_EKEY, NULL); switch (cert->toBeSigned.encryptionKey->publicKey.present){ case BasePublicEncryptionKey_PR_NOTHING: cert->toBeSigned.encryptionKey->publicKey.present = BasePublicEncryptionKey_PR_eciesNistP256; Loading @@ -489,15 +541,16 @@ int main(int argc, char ** argv) rc = fill_curve_point_eccP256(&cert->toBeSigned.encryptionKey->publicKey.choice.eciesBrainpoolP256r1, ecies_brainpoolp256r, buf); break; default: fprintf(stderr, "Unknown encryption key curve type\n"); fprintf(stderr, "Unknown encryption key curve type %d\n", cert->toBeSigned.encryptionKey->publicKey.present); break; } if (rc < 0){ fprintf(stderr, "%s: Cannot prepare encryption key\n", buf); return -1; } } cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _profileName, EXT_CERT, NULL); cvstrncpy(buf, CERT_MAX_SIZE, _outPath, "/", _certName, EXT_CERT, NULL); f = fopen(buf, "wb"); if (f == NULL){ perror(buf); Loading @@ -508,7 +561,7 @@ int main(int argc, char ** argv) // Encode as OER rc_e = asn_encode_to_buffer(NULL, ATS_CANONICAL_OER, &asn_DEF_EtsiTs103097Certificate, cert, buf, CERT_MAX_SIZE); if (rc_e.encoded <0){ fprintf(stderr, "%s: OER encoding failed for %s\n", _profileName, rc_e.failed_type->name); fprintf(stderr, "%s: OER encoding failed for %s\n", _certName, rc_e.failed_type->name); return -1; } Loading Loading @@ -570,6 +623,10 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur fprintf(stderr, "DEBUG: generate key %s\n", keyPath); } key = ecc_key_gen(curveType); if(key == NULL){ fprintf(stderr, "ERROR: key %s generation failed for curve %s\n", keyPath, _pk_curve_names[curveType & 3]); return rc; } ecc_key_private_save(key, keyPath, _outKeyFormat); strcpy(e_pub, EXT_PUB); ecc_key_public_save(key, keyPath, _outKeyFormat); Loading @@ -579,6 +636,7 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur } } } fsize = ecc_key_public(key, x, y, &compressed_y); if (fsize > 0){ OCTET_STRING_fromBuf(&point->choice.x_only, x, fsize); Loading @@ -596,6 +654,8 @@ static int fill_curve_point_eccP384(EccP384CurvePoint_t* point, ecc_curve_id cur fprintf(stderr, "DEBUG: %s_pub.y=%s\n", keyPath, hex); } rc = 0; }else{ fprintf(stderr, "ERROR: %s - unknown public key\n", keyPath); } ecc_key_free(key); return rc; Loading
tools/itscertgen/asn1certgen/asncodec/asn_system.h +5 −0 Changes for tools/itscertgen/asn1certgen/asncodec/asn_system.h: 5 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -138,8 +138,13 @@ typedef unsigned int uint32_t; #define ASN_PRIuMAX PRIuMAX #define ASN_PRIdMAX PRIdMAX #else #if _MSC_VER >= 1800 #define ASN_PRI_SIZE "zu" #define ASN_PRI_SSIZE "zd" #else #define ASN_PRI_SIZE "lu" #define ASN_PRI_SSIZE "ld" #endif #if LLONG_MAX > LONG_MAX #define ASN_PRIuMAX "llu" #define ASN_PRIdMAX "lld" Loading
tools/itscertgen/asn1certgen/ecc_openssl.c +7 −1 Changes for tools/itscertgen/asn1certgen/ecc_openssl.c: 7 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -49,6 +49,9 @@ int ecc_api_init() int i; for (i = 0; i < ARRAYSIZE(_config); i++){ _curves[i] = EC_GROUP_new_by_curve_name(_config[i].nid); if(_curves[i] == NULL){ fprintf(stderr, "ERROR: unknown curve %s\n", _config[i].name); } } return 0; } Loading Loading @@ -459,9 +462,12 @@ int ecc_verify(void * key, const char * hash, int hlength, const char *r, con sr = BN_new(); ss = BN_new(); BN_bin2bn(r, fsize, sr); BN_bin2bn(s, fsize, ss); #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L ECDSA_SIG_set0(ecdsa, sr, ss); #else ecdsa->r = sr; ecdsa->s = ss; // ECDSA_SIG_set0(ecdsa, sr, ss); #endif rc = ECDSA_do_verify(hash, hlength, ecdsa, eckey); ECDSA_SIG_free(ecdsa); BN_free(sr); BN_free(ss); Loading