mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-08 00:02:03 -04:00
implement gmp_rsa_private_key.decrypt()
This commit is contained in:
parent
c50ff68d0c
commit
d615ffdcf3
@ -313,11 +313,40 @@ static bool sign(private_gmp_rsa_private_key_t *this, signature_scheme_t scheme,
|
|||||||
/**
|
/**
|
||||||
* Implementation of gmp_rsa_private_key.decrypt.
|
* Implementation of gmp_rsa_private_key.decrypt.
|
||||||
*/
|
*/
|
||||||
static bool decrypt(private_gmp_rsa_private_key_t *this,
|
static bool decrypt(private_gmp_rsa_private_key_t *this, chunk_t crypto,
|
||||||
chunk_t crypto, chunk_t *plain)
|
chunk_t *plain)
|
||||||
{
|
{
|
||||||
DBG1("RSA private key decryption not implemented");
|
chunk_t em, stripped;
|
||||||
return FALSE;
|
bool success = FALSE;
|
||||||
|
|
||||||
|
/* rsa decryption using PKCS#1 RSADP */
|
||||||
|
stripped = em = rsadp(this, crypto);
|
||||||
|
|
||||||
|
/* PKCS#1 v1.5 8.1 encryption-block formatting (EB = 00 || 02 || PS || 00 || D) */
|
||||||
|
|
||||||
|
/* check for hex pattern 00 02 in decrypted message */
|
||||||
|
if ((*stripped.ptr++ != 0x00) || (*(stripped.ptr++) != 0x02))
|
||||||
|
{
|
||||||
|
DBG1("incorrect padding - probably wrong rsa key");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
stripped.len -= 2;
|
||||||
|
|
||||||
|
/* the plaintext data starts after first 0x00 byte */
|
||||||
|
while (stripped.len-- > 0 && *stripped.ptr++ != 0x00)
|
||||||
|
|
||||||
|
if (stripped.len == 0)
|
||||||
|
{
|
||||||
|
DBG1("no plaintext data");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
*plain = chunk_clone(stripped);
|
||||||
|
success = TRUE;
|
||||||
|
|
||||||
|
end:
|
||||||
|
chunk_clear(&em);
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -377,6 +377,7 @@ static bool encrypt_(private_gmp_rsa_public_key_t *this, chunk_t plain,
|
|||||||
memcpy(pos, plain.ptr, plain.len);
|
memcpy(pos, plain.ptr, plain.len);
|
||||||
DBG3("padded data before rsa encryption: %B", &em);
|
DBG3("padded data before rsa encryption: %B", &em);
|
||||||
|
|
||||||
|
/* rsa encryption using PKCS#1 RSAEP */
|
||||||
*crypto = rsaep(this, em);
|
*crypto = rsaep(this, em);
|
||||||
DBG3("rsa encrypted data: %B", crypto);
|
DBG3("rsa encrypted data: %B", crypto);
|
||||||
chunk_clear(&em);
|
chunk_clear(&em);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user