pkcs11: Properly encode RFC 3279 ECDSA signatures

Fixes #873.
This commit is contained in:
Tobias Brunner
2015-03-09 15:37:07 +01:00
parent 8c9a0b5fb5
commit b258ed0192
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2011 Tobias Brunner
* Copyright (C) 2011-2015 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2010 Martin Willi
@@ -23,6 +23,7 @@
#include "pkcs11_public_key.h"
#include <utils/debug.h>
#include <asn1/asn1.h>
typedef struct private_pkcs11_private_key_t private_pkcs11_private_key_t;
@@ -288,7 +289,23 @@ METHOD(private_key_t, sign, bool,
free(buf);
return FALSE;
}
*signature = chunk_create(buf, len);
switch (scheme)
{
case SIGN_ECDSA_WITH_SHA1_DER:
case SIGN_ECDSA_WITH_SHA256_DER:
case SIGN_ECDSA_WITH_SHA384_DER:
case SIGN_ECDSA_WITH_SHA512_DER:
/* return an ASN.1 encoded sequence of integers r and s */
len /= 2;
*signature = asn1_wrap(ASN1_SEQUENCE, "mm",
asn1_integer("c", chunk_create(buf, len)),
asn1_integer("c", chunk_create(buf+len, len)));
free(buf);
break;
default:
*signature = chunk_create(buf, len);
break;
}
return TRUE;
}