version 1.6, 2000/05/04 22:37:59 |
version 1.7, 2000/05/08 17:42:24 |
|
|
BN_bn2bin(sig->s, sigblob+ SIGBLOB_LEN - slen); |
BN_bn2bin(sig->s, sigblob+ SIGBLOB_LEN - slen); |
DSA_SIG_free(sig); |
DSA_SIG_free(sig); |
|
|
if (datafellows) { |
if (datafellows & SSH_BUG_SIGBLOB) { |
debug("datafellows"); |
debug("datafellows"); |
ret = xmalloc(SIGBLOB_LEN); |
ret = xmalloc(SIGBLOB_LEN); |
memcpy(ret, sigblob, SIGBLOB_LEN); |
memcpy(ret, sigblob, SIGBLOB_LEN); |
|
|
return -1; |
return -1; |
} |
} |
|
|
if (datafellows && signaturelen != SIGBLOB_LEN) { |
if (!(datafellows & SSH_BUG_SIGBLOB) && |
log("heh? datafellows ssh2 complies with ietf-drafts????"); |
signaturelen == SIGBLOB_LEN) { |
datafellows = 0; |
datafellows |= ~SSH_BUG_SIGBLOB; |
|
log("autodetect SSH_BUG_SIGBLOB"); |
|
} else if ((datafellows & SSH_BUG_SIGBLOB) && |
|
signaturelen != SIGBLOB_LEN) { |
|
log("autoremove SSH_BUG_SIGBLOB"); |
|
datafellows &= ~SSH_BUG_SIGBLOB; |
} |
} |
|
|
debug("len %d datafellows %d", signaturelen, datafellows); |
debug("len %d datafellows %d", signaturelen, datafellows); |
|
|
/* fetch signature */ |
/* fetch signature */ |
if (datafellows) { |
if (datafellows & SSH_BUG_SIGBLOB) { |
sigblob = signature; |
sigblob = signature; |
len = signaturelen; |
len = signaturelen; |
} else { |
} else { |
|
|
sig->s = BN_new(); |
sig->s = BN_new(); |
BN_bin2bn(sigblob, INTBLOB_LEN, sig->r); |
BN_bin2bn(sigblob, INTBLOB_LEN, sig->r); |
BN_bin2bn(sigblob+ INTBLOB_LEN, INTBLOB_LEN, sig->s); |
BN_bin2bn(sigblob+ INTBLOB_LEN, INTBLOB_LEN, sig->s); |
if (!datafellows) { |
|
|
if (!(datafellows & SSH_BUG_SIGBLOB)) { |
memset(sigblob, 0, len); |
memset(sigblob, 0, len); |
xfree(sigblob); |
xfree(sigblob); |
} |
} |