progress on asn

pull/1/head
Jacob Barthelmeh 2014-12-31 10:28:13 -07:00
parent 59eb83c6e9
commit d1e48e2364
4 changed files with 77 additions and 154 deletions

View File

@ -29,166 +29,88 @@
#include <cyassl/ctaocrypt/rsa.h>
#endif
#include <wolfssl/wolfcrypt/asn_public.h>
#ifdef __cplusplus
extern "C" {
#ifndef HAVE_FIPS
#ifdef WOLFSSL_CERT_GEN
#define InitCert wc_InitCert
#define MakeCert wc_MakeCert
#ifdef WOLFSSL_CERT_REQ
#define MakeCertReq wc_MakeCertReq
#endif
/* Certificate file Type */
enum CertType {
CERT_TYPE = 0,
PRIVATEKEY_TYPE,
DH_PARAM_TYPE,
CRL_TYPE,
CA_TYPE,
ECC_PRIVATEKEY_TYPE,
CERTREQ_TYPE
};
/* Signature type, by OID sum */
enum Ctc_SigType {
CTC_SHAwDSA = 517,
CTC_MD2wRSA = 646,
CTC_MD5wRSA = 648,
CTC_SHAwRSA = 649,
CTC_SHAwECDSA = 520,
CTC_SHA256wRSA = 655,
CTC_SHA256wECDSA = 524,
CTC_SHA384wRSA = 656,
CTC_SHA384wECDSA = 525,
CTC_SHA512wRSA = 657,
CTC_SHA512wECDSA = 526
};
enum Ctc_Encoding {
CTC_UTF8 = 0x0c, /* utf8 */
CTC_PRINTABLE = 0x13 /* printable */
};
#ifdef CYASSL_CERT_GEN
#ifndef HAVE_ECC
typedef struct ecc_key ecc_key;
#define SignCert wc_SignCert
#define MakeSelfCert wc_MakeSelfCert
#define SetIssuer wc_SetIssuer
#define SetSubject wc_SetSubject
#ifdef WOLFSSL_ALT_NAMES
#define SetAltNames wc_SetAltNames
#endif
enum Ctc_Misc {
CTC_NAME_SIZE = 64,
CTC_DATE_SIZE = 32,
CTC_MAX_ALT_SIZE = 16384, /* may be huge */
CTC_SERIAL_SIZE = 8
};
typedef struct CertName {
char country[CTC_NAME_SIZE];
char countryEnc;
char state[CTC_NAME_SIZE];
char stateEnc;
char locality[CTC_NAME_SIZE];
char localityEnc;
char sur[CTC_NAME_SIZE];
char surEnc;
char org[CTC_NAME_SIZE];
char orgEnc;
char unit[CTC_NAME_SIZE];
char unitEnc;
char commonName[CTC_NAME_SIZE];
char commonNameEnc;
char email[CTC_NAME_SIZE]; /* !!!! email has to be last !!!! */
} CertName;
/* for user to fill for certificate generation */
typedef struct Cert {
int version; /* x509 version */
byte serial[CTC_SERIAL_SIZE]; /* serial number */
int sigType; /* signature algo type */
CertName issuer; /* issuer info */
int daysValid; /* validity days */
int selfSigned; /* self signed flag */
CertName subject; /* subject info */
int isCA; /* is this going to be a CA */
/* internal use only */
int bodySz; /* pre sign total size */
int keyType; /* public key type of subject */
#ifdef CYASSL_ALT_NAMES
byte altNames[CTC_MAX_ALT_SIZE]; /* altNames copy */
int altNamesSz; /* altNames size in bytes */
byte beforeDate[CTC_DATE_SIZE]; /* before date copy */
int beforeDateSz; /* size of copy */
byte afterDate[CTC_DATE_SIZE]; /* after date copy */
int afterDateSz; /* size of copy */
#endif
#ifdef CYASSL_CERT_REQ
char challengePw[CTC_NAME_SIZE];
#endif
} Cert;
/* Initialize and Set Certficate defaults:
version = 3 (0x2)
serial = 0 (Will be randomly generated)
sigType = SHA_WITH_RSA
issuer = blank
daysValid = 500
selfSigned = 1 (true) use subject as issuer
subject = blank
isCA = 0 (false)
keyType = RSA_KEY (default)
*/
CYASSL_API void InitCert(Cert*);
CYASSL_API int MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
ecc_key*, RNG*);
#ifdef CYASSL_CERT_REQ
CYASSL_API int MakeCertReq(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
ecc_key*);
#endif
CYASSL_API int SignCert(int requestSz, int sigType, byte* derBuffer,
word32 derSz, RsaKey*, ecc_key*, RNG*);
CYASSL_API int MakeSelfCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
RNG*);
CYASSL_API int SetIssuer(Cert*, const char*);
CYASSL_API int SetSubject(Cert*, const char*);
#ifdef CYASSL_ALT_NAMES
CYASSL_API int SetAltNames(Cert*, const char*);
#endif
CYASSL_API int SetIssuerBuffer(Cert*, const byte*, int);
CYASSL_API int SetSubjectBuffer(Cert*, const byte*, int);
CYASSL_API int SetAltNamesBuffer(Cert*, const byte*, int);
CYASSL_API int SetDatesBuffer(Cert*, const byte*, int);
#define SetIssuerBuffer wc_SetIssuerBuffer
#define SetSubjectBuffer wc_SetSubjectBuffer
#define SetAltNamesBuffer wc_SetAltNamesBuffer
#define SetDatesBuffer wc_SetDatesBuffer
#ifdef HAVE_NTRU
CYASSL_API int MakeNtruCert(Cert*, byte* derBuffer, word32 derSz,
const byte* ntruKey, word16 keySz, RNG*);
#define MakeNtruCert wc_MakeNtruCert
#endif
#endif /* CYASSL_CERT_GEN */
#if defined(CYASSL_KEY_GEN) || defined(CYASSL_CERT_GEN)
CYASSL_API int DerToPem(const byte* der, word32 derSz, byte* output,
word32 outputSz, int type);
#endif /* WOLFSSL_CERT_GEN */
#if defined(WOLFSSL_KEY_GEN) || defined(WOLFSSL_CERT_GEN)
#define DerToPem wc_DerToPem
#endif
#ifdef HAVE_ECC
/* private key helpers */
CYASSL_API int EccPrivateKeyDecode(const byte* input,word32* inOutIdx,
ecc_key*,word32);
CYASSL_API int EccKeyToDer(ecc_key*, byte* output, word32 inLen);
#define EccPrivateKeyDecode wc_EccPrivateKeyDecode
#define EccKeyToDer wc_EccKeyToDer
#endif
/* DER encode signature */
CYASSL_API word32 EncodeSignature(byte* out, const byte* digest, word32 digSz,
int hashOID);
CYASSL_API int GetCTC_HashOID(int type);
#define EncodeSignature wc_EncodeSignature
#define GetCTC_HashOID wc_GetCTC_HashOID
#ifdef __cplusplus
} /* extern "C" */
#else
#define WOLFSSL_CERT_GEN CYASSL_CERTGEN
#define WOLFSSL_CERT_REQ CYASSL_CERT_REQ
#define WOLFSSL_ALT_NAMES CYASSL_ALT_NAMES
#ifdef WOLFSSL_CERT_GEN
#define wc_InitCert InitCert
#define wc_MakeCert MakeCert
#ifdef WOLFSSL_CERT_REQ
#define wc_MakeCertReq MakeCertReq
#endif
#define wc_SignCert SignCert
#define wc_MakeSelfCert MakeSelfCert
#define wc_SetIssuer SetIssuer
#define wc_SetSubject SetSubject
#ifdef WOLFSSL_ALT_NAMES
#define wc_SetAltNames SetAltNames
#endif
#define wc_SetIssuerBuffer SetIssuerBuffer
#define wc_SetSubjectBuffer SetSubjectBuffer
#define wc_SetAltNamesBuffer SetAltNamesBuffer
#define wc_SetDatesBuffer SetDatesBuffer
#ifdef HAVE_NTRU
#define wc_MakeNtruCert MakeNtruCert
#endif
#endif /* CTAO_CRYPT_ASN_PUBLIC_H */
#endif /* WOLFSSL_CERT_GEN */
#if defined(WOLFSSL_KEY_GEN) || defined(WOLFSSL_CERT_GEN)
#define wc_DerToPem DerToPem
#endif
#ifdef HAVE_ECC
/* private key helpers */
#define wc_EccPrivateKeyDecode EccPrivateKeyDecode
#define wc_EccKeyToDer EccKeyToDer
#endif
/* DER encode signature */
#define wc_EncodeSignature EncodeSignature
#define wc_GetCTC_HashOID GetCTC_HashOID
#endif /* HAVE_FIPS */
#endif /* CTA_CRYPT_ASN_PUBLIC_H */

View File

@ -83,12 +83,8 @@ src_libwolfssl_la_SOURCES += wolfcrypt/src/dh.c
endif
if BUILD_ASN
if BUILD_FIPS
src_libwolfssl_la_SOURCES += ctaocrypt/src/asn.c
else
src_libwolfssl_la_SOURCES += wolfcrypt/src/asn.c
endif
endif
if BUILD_CODING
if BUILD_FIPS

View File

@ -40,6 +40,11 @@
#endif
#define WOLFSSL_MAX_ERROR_SZ CYASSL_MAX_ERROR_SZ
#define WOLFSSL_WORD_SIZE CYASSL_WORD_SIZE
#define WOLFSSL_BIT_SIZE CYASSL_BIT_SIZE
#define WOLFSSL_MAX_16BIT CYASSL_MAX_16BIT
#define WOLFSSL_MAX_ERROR_SZ CYASSL_MAX_ERROR_SZ
#define wolfssl_word cyassl_word
/* memory macros */
/* when using fips map wolfSSL to CyaSSL*/
#define wolfSSL_Malloc_cb CyaSSL_Malloc_cb