diff options
author | Chris Weyl <cweyl@fedoraproject.org> | 2010-01-19 05:34:11 +0000 |
---|---|---|
committer | Chris Weyl <cweyl@fedoraproject.org> | 2010-01-19 05:34:11 +0000 |
commit | 8d25ddbae1426b127be51f30eccc05a4e6aea60a (patch) | |
tree | 2fc32046fa31e94e6cb97ae54f9c4a538152d929 | |
parent | - correct bad file entry under -devel (diff) | |
download | libssh2-freefilesync-8d25ddbae1426b127be51f30eccc05a4e6aea60a.tar.gz libssh2-freefilesync-8d25ddbae1426b127be51f30eccc05a4e6aea60a.tar.bz2 libssh2-freefilesync-8d25ddbae1426b127be51f30eccc05a4e6aea60a.zip |
- patch w/1aba38cd7d2658146675ce1737e5090f879f306; not yet in a GA release
-rw-r--r-- | libssh2-1.2.2-padding.patch | 117 | ||||
-rw-r--r-- | libssh2.spec | 9 |
2 files changed, 125 insertions, 1 deletions
diff --git a/libssh2-1.2.2-padding.patch b/libssh2-1.2.2-padding.patch new file mode 100644 index 0000000..127ad9d --- /dev/null +++ b/libssh2-1.2.2-padding.patch @@ -0,0 +1,117 @@ +commit 1aba38cd7d2658146675ce1737e5090f879f3068 +Author: Peter Stuge <peter@stuge.se> +Date: Sun Dec 6 07:20:58 2009 +0100 + + Fix padding in ssh-dss signature blob encoding + + DSA signatures consist of two 160-bit integers called r and s. In ssh-dss + signature blobs r and s are stored directly after each other in binary + representation, making up a 320-bit (40 byte) string. (See RFC4253 p14.) + + The crypto wrappers in libssh2 would either pack r and s incorrectly, or + fail, when at least one integer was small enough to be stored in 19 bytes + or less. + + The patch ensures that r and s are always stored as two 160 bit numbers. + +diff --git a/src/libgcrypt.c b/src/libgcrypt.c +index ba00284..b06be42 100644 +--- a/src/libgcrypt.c ++++ b/src/libgcrypt.c +@@ -424,6 +424,8 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx, + return -1; + } + ++ memset(sig, 0, 40); ++ + /* Extract R. */ + + data = gcry_sexp_find_token(sig_sexp, "r", 0); +@@ -433,22 +435,12 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx, + } + + tmp = gcry_sexp_nth_data(data, 1, &size); +- if (!tmp) { +- ret = -1; +- goto out; +- } +- +- if (tmp[0] == '\0') { +- tmp++; +- size--; +- } +- +- if (size != 20) { ++ if (!tmp || size < 1 || size > 20) { + ret = -1; + goto out; + } + +- memcpy(sig, tmp, 20); ++ memcpy(sig + (20 - size), tmp, size); + + gcry_sexp_release(data); + +@@ -461,22 +453,12 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx, + } + + tmp = gcry_sexp_nth_data(data, 1, &size); +- if (!tmp) { +- ret = -1; +- goto out; +- } +- +- if (tmp[0] == '\0') { +- tmp++; +- size--; +- } +- +- if (size != 20) { ++ if (!tmp || size < 1 || size > 20) { + ret = -1; + goto out; + } + +- memcpy(sig + 20, tmp, 20); ++ memcpy(sig + 20 + (20 - size), tmp, size); + + ret = 0; + out: +diff --git a/src/openssl.c b/src/openssl.c +index 250ea63..000c9ec 100644 +--- a/src/openssl.c ++++ b/src/openssl.c +@@ -420,7 +420,7 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx, + unsigned long hash_len, unsigned char *signature) + { + DSA_SIG *sig; +- int r_len, s_len, rs_pad; ++ int r_len, s_len; + (void) hash_len; + + sig = DSA_do_sign(hash, SHA_DIGEST_LENGTH, dsactx); +@@ -429,15 +429,20 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx, + } + + r_len = BN_num_bytes(sig->r); ++ if (r_len < 1 || r_len > 20) { ++ DSA_SIG_free(sig); ++ return -1; ++ } + s_len = BN_num_bytes(sig->s); +- rs_pad = (2 * SHA_DIGEST_LENGTH) - (r_len + s_len); +- if (rs_pad < 0) { ++ if (s_len < 1 || s_len > 20) { + DSA_SIG_free(sig); + return -1; + } + +- BN_bn2bin(sig->r, signature + rs_pad); +- BN_bn2bin(sig->s, signature + rs_pad + r_len); ++ memset(signature, 0, 40); ++ ++ BN_bn2bin(sig->r, signature + (20 - r_len)); ++ BN_bn2bin(sig->s, signature + 20 + (20 - s_len)); + + DSA_SIG_free(sig); + diff --git a/libssh2.spec b/libssh2.spec index 7e913b3..250323a 100644 --- a/libssh2.spec +++ b/libssh2.spec @@ -1,6 +1,6 @@ Name: libssh2 Version: 1.2.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A library implementing the SSH2 protocol Group: System Environment/Libraries @@ -9,6 +9,9 @@ URL: http://www.libssh2.org Source0: http://libssh2.org/download/libssh2-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# aka commit 1aba38cd7d2658146675ce1737e5090f879f306 +Patch0: libssh2-1.2.2-padding.patch + BuildRequires: openssl-devel BuildRequires: zlib-devel @@ -41,6 +44,7 @@ developing applications that use %{name}. %prep %setup -q +%patch0 -p1 # make sure things are UTF-8... for i in ChangeLog NEWS ; do @@ -96,6 +100,9 @@ rm -rf %{buildroot} %{_libdir}/pkgconfig/* %changelog +* Mon Jan 18 2010 Chris Weyl <cweyl@alumni.drew.edu> 1.2.2-3 +- patch w/1aba38cd7d2658146675ce1737e5090f879f306; not yet in a GA release + * Thu Jan 14 2010 Chris Weyl <cweyl@alumni.drew.edu> 1.2.2-2 - correct bad file entry under -devel |