aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2008-01-22 01:32:12 +0000
committerAndreas Steffen <andreas.steffen@strongswan.org>2008-01-22 01:32:12 +0000
commit2d49eaa1312d3fba7870be73f767c21bdd4e8294 (patch)
tree94658404a850b47e911b3e6b305b3816a88026f3 /src
parenta7419b07d1d7f31b06cff1f935c775cdb5f5ff37 (diff)
downloadstrongswan-2d49eaa1312d3fba7870be73f767c21bdd4e8294.tar.bz2
strongswan-2d49eaa1312d3fba7870be73f767c21bdd4e8294.tar.xz
x509_t.build_encoding() now supports any hash algorithm
Diffstat (limited to 'src')
-rwxr-xr-xsrc/libstrongswan/crypto/x509.c45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/libstrongswan/crypto/x509.c b/src/libstrongswan/crypto/x509.c
index 60ab53df0..022f15c93 100755
--- a/src/libstrongswan/crypto/x509.c
+++ b/src/libstrongswan/crypto/x509.c
@@ -1381,23 +1381,42 @@ static chunk_t x509_build_tbs(private_x509_t *this)
static void build_encoding(private_x509_t *this, hash_algorithm_t alg,
rsa_private_key_t *private_key)
{
- chunk_t tbs_cert, rawSignature, signature;
- u_char *pos;
-
- this->signatureAlgorithm = OID_SHA1_WITH_RSA;
- tbs_cert = x509_build_tbs(this);
- private_key->build_emsa_pkcs1_signature(private_key, alg, tbs_cert,
- &rawSignature);
+ switch (alg)
+ {
+ case HASH_MD5:
+ this->signatureAlgorithm = OID_MD5_WITH_RSA;
+ break;
+ case HASH_SHA1:
+ default:
+ this->signatureAlgorithm = OID_SHA1_WITH_RSA;
+ break;
+ case HASH_SHA256:
+ this->signatureAlgorithm = OID_SHA256_WITH_RSA;
+ break;
+ case HASH_SHA384:
+ this->signatureAlgorithm = OID_SHA384_WITH_RSA;
+ break;
+ case HASH_SHA512:
+ this->signatureAlgorithm = OID_SHA512_WITH_RSA;
+ }
+ this->tbsCertificate = x509_build_tbs(this);
+ {
+ chunk_t rawSignature;
+ u_char *pos;
- pos = build_asn1_object(&signature, ASN1_BIT_STRING, 1 + rawSignature.len);
- *pos++ = 0x00;
- memcpy(pos, rawSignature.ptr, rawSignature.len);
- free(rawSignature.ptr);
+ private_key->build_emsa_pkcs1_signature(private_key, alg,
+ this->tbsCertificate, &rawSignature);
+ pos = build_asn1_object(&this->signature, ASN1_BIT_STRING,
+ 1 + rawSignature.len);
+ *pos++ = 0x00;
+ memcpy(pos, rawSignature.ptr, rawSignature.len);
+ free(rawSignature.ptr);
+ }
this->certificate = asn1_wrap(ASN1_SEQUENCE, "mcm",
- tbs_cert,
+ this->tbsCertificate,
asn1_algorithmIdentifier(this->signatureAlgorithm),
- signature);
+ this->signature);
}