extended hasher_signature_algorithm_to_oid() function

This commit is contained in:
Andreas Steffen
2009-09-13 21:41:51 +02:00
parent ba274c2343
commit 210d287368
5 changed files with 47 additions and 76 deletions
@@ -28,6 +28,7 @@ typedef enum signature_scheme_t signature_scheme_t;
#include <library.h> #include <library.h>
#include <utils/identification.h> #include <utils/identification.h>
#include <credentials/keys/key_encoding.h>
/** /**
* Type of a key pair, the used crypto system * Type of a key pair, the used crypto system
+37 -27
View File
@@ -104,36 +104,46 @@ int hasher_algorithm_to_oid(hash_algorithm_t alg)
/* /*
* Described in header. * Described in header.
*/ */
int hasher_signature_algorithm_to_oid(hash_algorithm_t alg) int hasher_signature_algorithm_to_oid(hash_algorithm_t alg, key_type_t key)
{ {
int oid; switch (key)
switch (alg)
{ {
case HASH_MD2: case KEY_RSA:
oid = OID_MD2_WITH_RSA; switch (alg)
break; {
case HASH_MD5: case HASH_MD2:
oid = OID_MD5_WITH_RSA; return OID_MD2_WITH_RSA;
break; case HASH_MD5:
case HASH_SHA1: return OID_MD5_WITH_RSA;
oid = OID_SHA1_WITH_RSA; case HASH_SHA1:
break; return OID_SHA1_WITH_RSA;
case HASH_SHA224: case HASH_SHA224:
oid = OID_SHA224_WITH_RSA; return OID_SHA224_WITH_RSA;
break; case HASH_SHA256:
case HASH_SHA256: return OID_SHA256_WITH_RSA;
oid = OID_SHA256_WITH_RSA; case HASH_SHA384:
break; return OID_SHA384_WITH_RSA;
case HASH_SHA384: case HASH_SHA512:
oid = OID_SHA384_WITH_RSA; return OID_SHA512_WITH_RSA;
break; default:
case HASH_SHA512: return OID_UNKNOWN;
oid = OID_SHA512_WITH_RSA; }
break; case KEY_ECDSA:
switch (alg)
{
case HASH_SHA1:
return OID_ECDSA_WITH_SHA1;
case HASH_SHA256:
return OID_ECDSA_WITH_SHA256;
case HASH_SHA384:
return OID_ECDSA_WITH_SHA384;
case HASH_SHA512:
return OID_ECDSA_WITH_SHA512;
default:
return OID_UNKNOWN;
}
default: default:
oid = OID_UNKNOWN; return OID_UNKNOWN;
} }
return oid;
} }
+3 -1
View File
@@ -27,6 +27,7 @@ typedef enum hash_algorithm_t hash_algorithm_t;
typedef struct hasher_t hasher_t; typedef struct hasher_t hasher_t;
#include <library.h> #include <library.h>
#include <credentials/keys/public_key.h>
/** /**
* Algorithms to use for hashing. * Algorithms to use for hashing.
@@ -129,8 +130,9 @@ int hasher_algorithm_to_oid(hash_algorithm_t alg);
* Conversion of hash signature algorithm into ASN.1 OID. * Conversion of hash signature algorithm into ASN.1 OID.
* *
* @param alg hash algorithm * @param alg hash algorithm
* @param alg public key type
* @return ASN.1 OID if, or OID_UNKNOW * @return ASN.1 OID if, or OID_UNKNOW
*/ */
int hasher_signature_algorithm_to_oid(hash_algorithm_t alg); int hasher_signature_algorithm_to_oid(hash_algorithm_t alg, key_type_t key);
#endif /** HASHER_H_ @}*/ #endif /** HASHER_H_ @}*/
+2 -1
View File
@@ -825,7 +825,8 @@ bool build_envelopedData(private_pkcs7_t *this, x509_t *cert,
bool build_signedData(private_pkcs7_t *this, rsa_private_key_t *private_key, bool build_signedData(private_pkcs7_t *this, rsa_private_key_t *private_key,
hash_algorithm_t alg) hash_algorithm_t alg)
{ {
int signature_oid = hasher_signature_algorithm_to_oid(alg); int signature_oid = hasher_signature_algorithm_to_oid(alg,
private_key->get_type(private_key));
chunk_t authenticatedAttributes = chunk_empty; chunk_t authenticatedAttributes = chunk_empty;
chunk_t encryptedDigest = chunk_empty; chunk_t encryptedDigest = chunk_empty;
chunk_t signerInfo; chunk_t signerInfo;
+4 -47
View File
@@ -1220,54 +1220,11 @@ static bool generate(private_x509_cert_t *cert, certificate_t *sign_cert,
} }
/* select signature scheme */ /* select signature scheme */
switch (sign_key->get_type(sign_key)) cert->algorithm = hasher_signature_algorithm_to_oid(digest_alg,
sign_key->get_type(sign_key));
if (cert->algorithm == OID_UNKNOWN)
{ {
case KEY_RSA: return FALSE;
switch (digest_alg)
{
case HASH_MD5:
cert->algorithm = OID_MD5_WITH_RSA;
break;
case HASH_SHA1:
cert->algorithm = OID_SHA1_WITH_RSA;
break;
case HASH_SHA224:
cert->algorithm = OID_SHA224_WITH_RSA;
break;
case HASH_SHA256:
cert->algorithm = OID_SHA256_WITH_RSA;
break;
case HASH_SHA384:
cert->algorithm = OID_SHA384_WITH_RSA;
break;
case HASH_SHA512:
cert->algorithm = OID_SHA512_WITH_RSA;
break;
default:
return FALSE;
}
break;
case KEY_ECDSA:
switch (digest_alg)
{
case HASH_SHA1:
cert->algorithm = OID_ECDSA_WITH_SHA1;
break;
case HASH_SHA256:
cert->algorithm = OID_ECDSA_WITH_SHA256;
break;
case HASH_SHA384:
cert->algorithm = OID_ECDSA_WITH_SHA384;
break;
case HASH_SHA512:
cert->algorithm = OID_ECDSA_WITH_SHA512;
break;
default:
return FALSE;
}
break;
default:
return FALSE;
} }
scheme = signature_scheme_from_oid(cert->algorithm); scheme = signature_scheme_from_oid(cert->algorithm);