version 1.32.2.1, 2006/10/06 03:19:33 |
version 1.33, 2006/03/19 18:51:18 |
|
|
/* $OpenBSD$ */ |
|
/* |
/* |
* Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> |
* Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> |
* |
* |
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
|
#include "includes.h" |
|
|
#include <sys/types.h> |
|
|
|
#include <openssl/evp.h> |
#include <openssl/evp.h> |
#include <openssl/err.h> |
#include <openssl/err.h> |
|
|
#include <string.h> |
|
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "log.h" |
#include "log.h" |
#include "buffer.h" |
#include "buffer.h" |
|
#include "bufaux.h" |
#include "key.h" |
#include "key.h" |
#include "compat.h" |
#include "compat.h" |
#include "ssh.h" |
#include "ssh.h" |
|
|
|
|
if (ok != 1) { |
if (ok != 1) { |
int ecode = ERR_get_error(); |
int ecode = ERR_get_error(); |
|
|
error("ssh_rsa_sign: RSA_sign failed: %s", |
error("ssh_rsa_sign: RSA_sign failed: %s", |
ERR_error_string(ecode, NULL)); |
ERR_error_string(ecode, NULL)); |
xfree(sig); |
xfree(sig); |
|
|
u_int diff = modlen - len; |
u_int diff = modlen - len; |
debug("ssh_rsa_verify: add padding: modlen %u > len %u", |
debug("ssh_rsa_verify: add padding: modlen %u > len %u", |
modlen, len); |
modlen, len); |
sigblob = xrealloc(sigblob, 1, modlen); |
sigblob = xrealloc(sigblob, modlen); |
memmove(sigblob + diff, sigblob, len); |
memmove(sigblob + diff, sigblob, len); |
memset(sigblob, 0, diff); |
memset(sigblob, 0, diff); |
len = modlen; |
len = modlen; |
|
|
break; |
break; |
default: |
default: |
goto done; |
goto done; |
|
break; |
} |
} |
if (hashlen != hlen) { |
if (hashlen != hlen) { |
error("bad hashlen"); |
error("bad hashlen"); |