mirror of https://github.com/openssl/openssl.git
				
				
				
			Add PSS algorithm printing. This is an initial step towards full PSS support.
Uses ASN1 module in Martin Kaiser's PSS patch.
This commit is contained in:
		
							parent
							
								
									148924c1f4
								
							
						
					
					
						commit
						ff04bbe363
					
				
							
								
								
									
										3
									
								
								CHANGES
								
								
								
								
							
							
						
						
									
										3
									
								
								CHANGES
								
								
								
								
							|  | @ -4,6 +4,9 @@ | ||||||
| 
 | 
 | ||||||
|  Changes between 1.0.0 and 1.1.0  [xx XXX xxxx] |  Changes between 1.0.0 and 1.1.0  [xx XXX xxxx] | ||||||
| 
 | 
 | ||||||
|  |    *) Add signature printing for PSS. Add PSS OIDs. | ||||||
|  |      [Steve Henson, Martin Kaiser <lists@kaiser.cx>] | ||||||
|  | 
 | ||||||
|   *) Add algorithm specific signature printing. An individual ASN1 method |   *) Add algorithm specific signature printing. An individual ASN1 method | ||||||
|      can now print out signatures instead of the standard hex dump.  |      can now print out signatures instead of the standard hex dump.  | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -62,12 +62,12 @@ | ||||||
|  * [including the GNU Public Licence.] |  * [including the GNU Public Licence.] | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #define NUM_NID 911 | #define NUM_NID 913 | ||||||
| #define NUM_SN 904 | #define NUM_SN 906 | ||||||
| #define NUM_LN 904 | #define NUM_LN 906 | ||||||
| #define NUM_OBJ 854 | #define NUM_OBJ 856 | ||||||
| 
 | 
 | ||||||
| static const unsigned char lvalues[5953]={ | static const unsigned char lvalues[5971]={ | ||||||
| 0x00,                                        /* [  0] OBJ_undef */ | 0x00,                                        /* [  0] OBJ_undef */ | ||||||
| 0x2A,0x86,0x48,0x86,0xF7,0x0D,               /* [  1] OBJ_rsadsi */ | 0x2A,0x86,0x48,0x86,0xF7,0x0D,               /* [  1] OBJ_rsadsi */ | ||||||
| 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,          /* [  7] OBJ_pkcs */ | 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,          /* [  7] OBJ_pkcs */ | ||||||
|  | @ -922,6 +922,8 @@ static const unsigned char lvalues[5953]={ | ||||||
| 0x2A,0x83,0x08,0x8C,0x9A,0x4B,0x3D,0x01,0x01,0x03,0x03,/* [5926] OBJ_id_camellia192_wrap */ | 0x2A,0x83,0x08,0x8C,0x9A,0x4B,0x3D,0x01,0x01,0x03,0x03,/* [5926] OBJ_id_camellia192_wrap */ | ||||||
| 0x2A,0x83,0x08,0x8C,0x9A,0x4B,0x3D,0x01,0x01,0x03,0x04,/* [5937] OBJ_id_camellia256_wrap */ | 0x2A,0x83,0x08,0x8C,0x9A,0x4B,0x3D,0x01,0x01,0x03,0x04,/* [5937] OBJ_id_camellia256_wrap */ | ||||||
| 0x55,0x1D,0x25,0x00,                         /* [5948] OBJ_anyExtendedKeyUsage */ | 0x55,0x1D,0x25,0x00,                         /* [5948] OBJ_anyExtendedKeyUsage */ | ||||||
|  | 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x08,/* [5952] OBJ_mgf1 */ | ||||||
|  | 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x0A,/* [5961] OBJ_rsassaPss */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const ASN1_OBJECT nid_objs[NUM_NID]={ | static const ASN1_OBJECT nid_objs[NUM_NID]={ | ||||||
|  | @ -2391,6 +2393,8 @@ static const ASN1_OBJECT nid_objs[NUM_NID]={ | ||||||
| 	11,&(lvalues[5937]),0}, | 	11,&(lvalues[5937]),0}, | ||||||
| {"anyExtendedKeyUsage","Any Extended Key Usage", | {"anyExtendedKeyUsage","Any Extended Key Usage", | ||||||
| 	NID_anyExtendedKeyUsage,4,&(lvalues[5948]),0}, | 	NID_anyExtendedKeyUsage,4,&(lvalues[5948]),0}, | ||||||
|  | {"MGF1","mgf1",NID_mgf1,9,&(lvalues[5952]),0}, | ||||||
|  | {"RSASSA-PSS","rsassaPss",NID_rsassaPss,9,&(lvalues[5961]),0}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const unsigned int sn_objs[NUM_SN]={ | static const unsigned int sn_objs[NUM_SN]={ | ||||||
|  | @ -2495,6 +2499,7 @@ static const unsigned int sn_objs[NUM_SN]={ | ||||||
|  4,	/* "MD5" */ |  4,	/* "MD5" */ | ||||||
| 114,	/* "MD5-SHA1" */ | 114,	/* "MD5-SHA1" */ | ||||||
| 95,	/* "MDC2" */ | 95,	/* "MDC2" */ | ||||||
|  | 911,	/* "MGF1" */ | ||||||
| 388,	/* "Mail" */ | 388,	/* "Mail" */ | ||||||
| 393,	/* "NULL" */ | 393,	/* "NULL" */ | ||||||
| 404,	/* "NULL" */ | 404,	/* "NULL" */ | ||||||
|  | @ -2551,6 +2556,7 @@ static const unsigned int sn_objs[NUM_SN]={ | ||||||
| 668,	/* "RSA-SHA256" */ | 668,	/* "RSA-SHA256" */ | ||||||
| 669,	/* "RSA-SHA384" */ | 669,	/* "RSA-SHA384" */ | ||||||
| 670,	/* "RSA-SHA512" */ | 670,	/* "RSA-SHA512" */ | ||||||
|  | 912,	/* "RSASSA-PSS" */ | ||||||
| 777,	/* "SEED-CBC" */ | 777,	/* "SEED-CBC" */ | ||||||
| 779,	/* "SEED-CFB" */ | 779,	/* "SEED-CFB" */ | ||||||
| 776,	/* "SEED-ECB" */ | 776,	/* "SEED-ECB" */ | ||||||
|  | @ -3882,6 +3888,7 @@ static const unsigned int ln_objs[NUM_LN]={ | ||||||
| 602,	/* "merchant initiated auth" */ | 602,	/* "merchant initiated auth" */ | ||||||
| 514,	/* "message extensions" */ | 514,	/* "message extensions" */ | ||||||
| 51,	/* "messageDigest" */ | 51,	/* "messageDigest" */ | ||||||
|  | 911,	/* "mgf1" */ | ||||||
| 506,	/* "mime-mhs-bodies" */ | 506,	/* "mime-mhs-bodies" */ | ||||||
| 505,	/* "mime-mhs-headings" */ | 505,	/* "mime-mhs-headings" */ | ||||||
| 488,	/* "mobileTelephoneNumber" */ | 488,	/* "mobileTelephoneNumber" */ | ||||||
|  | @ -3981,6 +3988,7 @@ static const unsigned int ln_objs[NUM_LN]={ | ||||||
|  6,	/* "rsaEncryption" */ |  6,	/* "rsaEncryption" */ | ||||||
| 644,	/* "rsaOAEPEncryptionSET" */ | 644,	/* "rsaOAEPEncryptionSET" */ | ||||||
| 377,	/* "rsaSignature" */ | 377,	/* "rsaSignature" */ | ||||||
|  | 912,	/* "rsassaPss" */ | ||||||
| 124,	/* "run length compression" */ | 124,	/* "run length compression" */ | ||||||
| 482,	/* "sOARecord" */ | 482,	/* "sOARecord" */ | ||||||
| 155,	/* "safeContentsBag" */ | 155,	/* "safeContentsBag" */ | ||||||
|  | @ -4797,6 +4805,8 @@ static const unsigned int obj_objs[NUM_OBJ]={ | ||||||
|  8,	/* OBJ_md5WithRSAEncryption         1 2 840 113549 1 1 4 */ |  8,	/* OBJ_md5WithRSAEncryption         1 2 840 113549 1 1 4 */ | ||||||
| 65,	/* OBJ_sha1WithRSAEncryption        1 2 840 113549 1 1 5 */ | 65,	/* OBJ_sha1WithRSAEncryption        1 2 840 113549 1 1 5 */ | ||||||
| 644,	/* OBJ_rsaOAEPEncryptionSET         1 2 840 113549 1 1 6 */ | 644,	/* OBJ_rsaOAEPEncryptionSET         1 2 840 113549 1 1 6 */ | ||||||
|  | 911,	/* OBJ_mgf1                         1 2 840 113549 1 1 8 */ | ||||||
|  | 912,	/* OBJ_rsassaPss                    1 2 840 113549 1 1 10 */ | ||||||
| 668,	/* OBJ_sha256WithRSAEncryption      1 2 840 113549 1 1 11 */ | 668,	/* OBJ_sha256WithRSAEncryption      1 2 840 113549 1 1 11 */ | ||||||
| 669,	/* OBJ_sha384WithRSAEncryption      1 2 840 113549 1 1 12 */ | 669,	/* OBJ_sha384WithRSAEncryption      1 2 840 113549 1 1 12 */ | ||||||
| 670,	/* OBJ_sha512WithRSAEncryption      1 2 840 113549 1 1 13 */ | 670,	/* OBJ_sha512WithRSAEncryption      1 2 840 113549 1 1 13 */ | ||||||
|  |  | ||||||
|  | @ -580,6 +580,16 @@ | ||||||
| #define NID_sha1WithRSAEncryption		65 | #define NID_sha1WithRSAEncryption		65 | ||||||
| #define OBJ_sha1WithRSAEncryption		OBJ_pkcs1,5L | #define OBJ_sha1WithRSAEncryption		OBJ_pkcs1,5L | ||||||
| 
 | 
 | ||||||
|  | #define SN_mgf1		"MGF1" | ||||||
|  | #define LN_mgf1		"mgf1" | ||||||
|  | #define NID_mgf1		911 | ||||||
|  | #define OBJ_mgf1		OBJ_pkcs1,8L | ||||||
|  | 
 | ||||||
|  | #define SN_rsassaPss		"RSASSA-PSS" | ||||||
|  | #define LN_rsassaPss		"rsassaPss" | ||||||
|  | #define NID_rsassaPss		912 | ||||||
|  | #define OBJ_rsassaPss		OBJ_pkcs1,10L | ||||||
|  | 
 | ||||||
| #define SN_sha256WithRSAEncryption		"RSA-SHA256" | #define SN_sha256WithRSAEncryption		"RSA-SHA256" | ||||||
| #define LN_sha256WithRSAEncryption		"sha256WithRSAEncryption" | #define LN_sha256WithRSAEncryption		"sha256WithRSAEncryption" | ||||||
| #define NID_sha256WithRSAEncryption		668 | #define NID_sha256WithRSAEncryption		668 | ||||||
|  |  | ||||||
|  | @ -908,3 +908,5 @@ id_camellia128_wrap		907 | ||||||
| id_camellia192_wrap		908 | id_camellia192_wrap		908 | ||||||
| id_camellia256_wrap		909 | id_camellia256_wrap		909 | ||||||
| anyExtendedKeyUsage		910 | anyExtendedKeyUsage		910 | ||||||
|  | mgf1		911 | ||||||
|  | rsassaPss		912 | ||||||
|  |  | ||||||
|  | @ -38,10 +38,12 @@ static const nid_triple sigoid_srt[] = | ||||||
| 	{NID_id_GostR3411_94_with_GostR3410_94, NID_id_GostR3411_94, NID_id_GostR3410_94}, | 	{NID_id_GostR3411_94_with_GostR3410_94, NID_id_GostR3411_94, NID_id_GostR3410_94}, | ||||||
| 	{NID_id_GostR3411_94_with_GostR3410_94_cc, NID_id_GostR3411_94, NID_id_GostR3410_94_cc}, | 	{NID_id_GostR3411_94_with_GostR3410_94_cc, NID_id_GostR3411_94, NID_id_GostR3410_94_cc}, | ||||||
| 	{NID_id_GostR3411_94_with_GostR3410_2001_cc, NID_id_GostR3411_94, NID_id_GostR3410_2001_cc}, | 	{NID_id_GostR3411_94_with_GostR3410_2001_cc, NID_id_GostR3411_94, NID_id_GostR3410_2001_cc}, | ||||||
|  | 	{NID_rsassaPss, NID_undef, NID_rsaEncryption}, | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| static const nid_triple * const sigoid_srt_xref[] = | static const nid_triple * const sigoid_srt_xref[] = | ||||||
| 	{ | 	{ | ||||||
|  | 	&sigoid_srt[29], | ||||||
| 	&sigoid_srt[17], | 	&sigoid_srt[17], | ||||||
| 	&sigoid_srt[18], | 	&sigoid_srt[18], | ||||||
| 	&sigoid_srt[0], | 	&sigoid_srt[0], | ||||||
|  |  | ||||||
|  | @ -13,6 +13,10 @@ sha512WithRSAEncryption	sha512	rsaEncryption | ||||||
| sha224WithRSAEncryption	sha224	rsaEncryption | sha224WithRSAEncryption	sha224	rsaEncryption | ||||||
| mdc2WithRSA		mdc2	rsaEncryption | mdc2WithRSA		mdc2	rsaEncryption | ||||||
| ripemd160WithRSA	ripemd160 rsaEncryption | ripemd160WithRSA	ripemd160 rsaEncryption | ||||||
|  | # For PSS the digest algorithm can vary and depends on the included | ||||||
|  | # AlgorithmIdentifier. The digest "undef" indicates the public key | ||||||
|  | # method should handle this explicitly. | ||||||
|  | rsassaPss		undef	rsaEncryption | ||||||
| 
 | 
 | ||||||
| # Alternative deprecated OIDs. By using the older "rsa" OID this | # Alternative deprecated OIDs. By using the older "rsa" OID this | ||||||
| # type will be recognized by not normally used. | # type will be recognized by not normally used. | ||||||
|  |  | ||||||
|  | @ -166,6 +166,9 @@ pkcs1 3			: RSA-MD4		: md4WithRSAEncryption | ||||||
| pkcs1 4			: RSA-MD5		: md5WithRSAEncryption | pkcs1 4			: RSA-MD5		: md5WithRSAEncryption | ||||||
| pkcs1 5			: RSA-SHA1		: sha1WithRSAEncryption | pkcs1 5			: RSA-SHA1		: sha1WithRSAEncryption | ||||||
| # According to PKCS #1 version 2.1 | # According to PKCS #1 version 2.1 | ||||||
|  | pkcs1 8			: MGF1			: mgf1 | ||||||
|  | pkcs1 10		: RSASSA-PSS		: rsassaPss | ||||||
|  | 
 | ||||||
| pkcs1 11		: RSA-SHA256		: sha256WithRSAEncryption | pkcs1 11		: RSA-SHA256		: sha256WithRSAEncryption | ||||||
| pkcs1 12		: RSA-SHA384		: sha384WithRSAEncryption | pkcs1 12		: RSA-SHA384		: sha384WithRSAEncryption | ||||||
| pkcs1 13		: RSA-SHA512		: sha512WithRSAEncryption | pkcs1 13		: RSA-SHA512		: sha512WithRSAEncryption | ||||||
|  |  | ||||||
|  | @ -300,6 +300,16 @@ const RSA_METHOD *RSA_null_method(void); | ||||||
| DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) | DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) | ||||||
| DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) | DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) | ||||||
| 
 | 
 | ||||||
|  | typedef struct rsassaPssParams_st | ||||||
|  | 	{ | ||||||
|  | 	X509_ALGOR *hashAlgorithm; | ||||||
|  | 	X509_ALGOR *maskGenAlgorithm; | ||||||
|  | 	ASN1_INTEGER *saltLength; | ||||||
|  | 	ASN1_INTEGER *trailerField; | ||||||
|  | 	} RSASSA_PSS_PARAMS; | ||||||
|  | 
 | ||||||
|  | DECLARE_ASN1_FUNCTIONS(RSASSA_PSS_PARAMS) | ||||||
|  | 
 | ||||||
| #ifndef OPENSSL_NO_FP_API | #ifndef OPENSSL_NO_FP_API | ||||||
| int	RSA_print_fp(FILE *fp, const RSA *r,int offset); | int	RSA_print_fp(FILE *fp, const RSA *r,int offset); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -265,6 +265,114 @@ static int rsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent, | ||||||
| 	return do_rsa_print(bp, pkey->pkey.rsa, indent, 1); | 	return do_rsa_print(bp, pkey->pkey.rsa, indent, 1); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | static int rsa_pss_param_print(BIO *bp, RSASSA_PSS_PARAMS *pss, int indent) | ||||||
|  | 	{ | ||||||
|  | 	int rv = 0; | ||||||
|  | 	X509_ALGOR *maskHash = NULL; | ||||||
|  | 	if (!pss) | ||||||
|  | 		{ | ||||||
|  | 		if (BIO_puts(bp, " (INVALID PSS PARAMETERS)\n") <= 0) | ||||||
|  | 			return 0; | ||||||
|  | 		} | ||||||
|  | 	if (BIO_puts(bp, "\n") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 	if (!BIO_indent(bp, indent, 128)) | ||||||
|  | 		goto err; | ||||||
|  | 	if (BIO_puts(bp, "Hash Algorithm: ") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 
 | ||||||
|  | 	if (pss->hashAlgorithm) | ||||||
|  | 		{ | ||||||
|  | 		if (i2a_ASN1_OBJECT(bp, pss->hashAlgorithm->algorithm) <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		} | ||||||
|  | 	else if (BIO_puts(bp, "sha1 (default)") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 
 | ||||||
|  | 	if (BIO_puts(bp, "\n") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 
 | ||||||
|  | 	if (!BIO_indent(bp, indent, 128)) | ||||||
|  | 		goto err; | ||||||
|  | 
 | ||||||
|  | 	if (BIO_puts(bp, "Mask Algorithm: ") <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 	if (pss->maskGenAlgorithm) | ||||||
|  | 		{ | ||||||
|  | 		ASN1_TYPE *param = pss->maskGenAlgorithm->parameter; | ||||||
|  | 		if (param->type == V_ASN1_SEQUENCE) | ||||||
|  | 			{ | ||||||
|  | 			const unsigned char *p = param->value.sequence->data; | ||||||
|  | 			int plen = param->value.sequence->length; | ||||||
|  | 			maskHash = d2i_X509_ALGOR(NULL, &p, plen); | ||||||
|  | 			} | ||||||
|  | 		if (i2a_ASN1_OBJECT(bp, pss->maskGenAlgorithm->algorithm) <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		if (BIO_puts(bp, " with ") <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		if (i2a_ASN1_OBJECT(bp, maskHash->algorithm) <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		} | ||||||
|  | 	else if (BIO_puts(bp, "mgf1 with sha1 (default)") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 	BIO_puts(bp, "\n"); | ||||||
|  | 
 | ||||||
|  | 	if (!BIO_indent(bp, indent, 128)) | ||||||
|  | 		goto err; | ||||||
|  | 	if (BIO_puts(bp, "Salt Length: ") <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 	if (pss->saltLength) | ||||||
|  | 		{ | ||||||
|  | 		if (i2a_ASN1_INTEGER(bp, pss->saltLength) <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		} | ||||||
|  | 	else if (BIO_puts(bp, "20 (default)") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 	BIO_puts(bp, "\n"); | ||||||
|  | 
 | ||||||
|  | 	if (!BIO_indent(bp, indent, 128)) | ||||||
|  | 		goto err; | ||||||
|  | 	if (BIO_puts(bp, "Trailer Field: ") <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 	if (pss->trailerField) | ||||||
|  | 		{ | ||||||
|  | 		if (i2a_ASN1_INTEGER(bp, pss->trailerField) <= 0) | ||||||
|  | 			goto err; | ||||||
|  | 		} | ||||||
|  | 	else if (BIO_puts(bp, "0xbc (default)") <= 0) | ||||||
|  | 		goto err; | ||||||
|  | 	BIO_puts(bp, "\n"); | ||||||
|  | 	 | ||||||
|  | 	rv = 1; | ||||||
|  | 
 | ||||||
|  | 	err: | ||||||
|  | 	if (maskHash) | ||||||
|  | 		X509_ALGOR_free(maskHash); | ||||||
|  | 	RSASSA_PSS_PARAMS_free(pss); | ||||||
|  | 	return rv; | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | static int rsa_sig_print(BIO *bp, const X509_ALGOR *sigalg, | ||||||
|  | 					const ASN1_STRING *sig, | ||||||
|  | 					int indent, ASN1_PCTX *pctx) | ||||||
|  | 	{ | ||||||
|  | 	if (OBJ_obj2nid(sigalg->algorithm) == NID_rsassaPss) | ||||||
|  | 		{ | ||||||
|  | 		RSASSA_PSS_PARAMS *pss = NULL; | ||||||
|  | 		ASN1_TYPE *param = sigalg->parameter; | ||||||
|  | 		if (param && param->type == V_ASN1_SEQUENCE) | ||||||
|  | 			{ | ||||||
|  | 			const unsigned char *p = param->value.sequence->data; | ||||||
|  | 			int plen = param->value.sequence->length; | ||||||
|  | 			pss = d2i_RSASSA_PSS_PARAMS(NULL, &p, plen); | ||||||
|  | 			} | ||||||
|  | 		if (!rsa_pss_param_print(bp, pss, indent)) | ||||||
|  | 			return 0; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	return X509_signature_dump(bp, sig, indent); | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) | static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) | ||||||
| 	{ | 	{ | ||||||
|  | @ -333,8 +441,9 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[] = | ||||||
| 		int_rsa_size, | 		int_rsa_size, | ||||||
| 		rsa_bits, | 		rsa_bits, | ||||||
| 
 | 
 | ||||||
| 		0,0,0,0,0,0,0, | 		0,0,0,0,0,0, | ||||||
| 
 | 
 | ||||||
|  | 		rsa_sig_print, | ||||||
| 		int_rsa_free, | 		int_rsa_free, | ||||||
| 		rsa_pkey_ctrl, | 		rsa_pkey_ctrl, | ||||||
| 		old_rsa_priv_decode, | 		old_rsa_priv_decode, | ||||||
|  |  | ||||||
|  | @ -60,6 +60,7 @@ | ||||||
| #include "cryptlib.h" | #include "cryptlib.h" | ||||||
| #include <openssl/bn.h> | #include <openssl/bn.h> | ||||||
| #include <openssl/rsa.h> | #include <openssl/rsa.h> | ||||||
|  | #include <openssl/x509.h> | ||||||
| #include <openssl/asn1t.h> | #include <openssl/asn1t.h> | ||||||
| 
 | 
 | ||||||
| /* Override the default free and new methods */ | /* Override the default free and new methods */ | ||||||
|  | @ -96,6 +97,15 @@ ASN1_SEQUENCE_cb(RSAPublicKey, rsa_cb) = { | ||||||
| 	ASN1_SIMPLE(RSA, e, BIGNUM), | 	ASN1_SIMPLE(RSA, e, BIGNUM), | ||||||
| } ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) | } ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) | ||||||
| 
 | 
 | ||||||
|  | ASN1_SEQUENCE(RSASSA_PSS_PARAMS) = { | ||||||
|  | 	ASN1_EXP_OPT(RSASSA_PSS_PARAMS, hashAlgorithm, X509_ALGOR,0), | ||||||
|  | 	ASN1_EXP_OPT(RSASSA_PSS_PARAMS, maskGenAlgorithm, X509_ALGOR,1), | ||||||
|  | 	ASN1_EXP_OPT(RSASSA_PSS_PARAMS, saltLength, ASN1_INTEGER,2), | ||||||
|  | 	ASN1_EXP_OPT(RSASSA_PSS_PARAMS, trailerField, ASN1_INTEGER,3) | ||||||
|  | } ASN1_SEQUENCE_END(RSASSA_PSS_PARAMS) | ||||||
|  | 
 | ||||||
|  | IMPLEMENT_ASN1_FUNCTIONS(RSASSA_PSS_PARAMS) | ||||||
|  | 
 | ||||||
| IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPrivateKey, RSAPrivateKey) | IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPrivateKey, RSAPrivateKey) | ||||||
| 
 | 
 | ||||||
| IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPublicKey, RSAPublicKey) | IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPublicKey, RSAPublicKey) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue