OLD | NEW |
(Empty) | |
| 1 diff --git android-openssl.orig/ssl/s3_clnt.c android-openssl/ssl/s3_clnt.c |
| 2 index d6154c5..2b094c9 100644 |
| 3 --- android-openssl.orig/ssl/s3_clnt.c |
| 4 +++ android-openssl/ssl/s3_clnt.c |
| 5 @@ -3022,33 +3022,18 @@ int ssl3_send_client_verify(SSL *s) |
| 6 unsigned char *p,*d; |
| 7 unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH]; |
| 8 EVP_PKEY *pkey; |
| 9 - EVP_PKEY_CTX *pctx=NULL; |
| 10 + EVP_PKEY_CTX *pctx = NULL; |
| 11 EVP_MD_CTX mctx; |
| 12 - unsigned u=0; |
| 13 + unsigned signature_length = 0; |
| 14 unsigned long n; |
| 15 - int j; |
| 16 |
| 17 EVP_MD_CTX_init(&mctx); |
| 18 |
| 19 if (s->state == SSL3_ST_CW_CERT_VRFY_A) |
| 20 { |
| 21 - d=(unsigned char *)s->init_buf->data; |
| 22 - p= &(d[4]); |
| 23 - pkey=s->cert->key->privatekey; |
| 24 -/* Create context from key and test if sha1 is allowed as digest */ |
| 25 - pctx = EVP_PKEY_CTX_new(pkey,NULL); |
| 26 - EVP_PKEY_sign_init(pctx); |
| 27 - if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1())>0) |
| 28 - { |
| 29 - if (TLS1_get_version(s) < TLS1_2_VERSION) |
| 30 - s->method->ssl3_enc->cert_verify_mac(s, |
| 31 - NID_sha1, |
| 32 - &(data[MD5_DIGEST_LENGTH])); |
| 33 - } |
| 34 - else |
| 35 - { |
| 36 - ERR_clear_error(); |
| 37 - } |
| 38 + d = (unsigned char *)s->init_buf->data; |
| 39 + p = &(d[4]); |
| 40 + pkey = s->cert->key->privatekey; |
| 41 /* For TLS v1.2 send signature algorithm and signature |
| 42 * using agreed digest and cached handshake records. |
| 43 */ |
| 44 @@ -3072,14 +3057,15 @@ int ssl3_send_client_verify(SSL *s) |
| 45 #endif |
| 46 if (!EVP_SignInit_ex(&mctx, md, NULL) |
| 47 || !EVP_SignUpdate(&mctx, hdata, hdatalen) |
| 48 - || !EVP_SignFinal(&mctx, p + 2, &u, pkey)) |
| 49 + || !EVP_SignFinal(&mctx, p + 2, |
| 50 + &signature_length, pkey)) |
| 51 { |
| 52 SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, |
| 53 ERR_R_EVP_LIB); |
| 54 goto err; |
| 55 } |
| 56 - s2n(u,p); |
| 57 - n = u + 4; |
| 58 + s2n(signature_length, p); |
| 59 + n = signature_length + 4; |
| 60 if (!ssl3_digest_cached_records(s)) |
| 61 goto err; |
| 62 } |
| 63 @@ -3087,78 +3073,80 @@ int ssl3_send_client_verify(SSL *s) |
| 64 #ifndef OPENSSL_NO_RSA |
| 65 if (pkey->type == EVP_PKEY_RSA) |
| 66 { |
| 67 + s->method->ssl3_enc->cert_verify_mac(s, NID_md5, data); |
| 68 s->method->ssl3_enc->cert_verify_mac(s, |
| 69 - NID_md5, |
| 70 - &(data[0])); |
| 71 + NID_sha1, &(data[MD5_DIGEST_LENGTH])); |
| 72 if (RSA_sign(NID_md5_sha1, data, |
| 73 - MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH, |
| 74 - &(p[2]), &u, pkey->pkey.rsa) <= 0 ) |
| 75 + MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH, |
| 76 + &(p[2]), &signature_length, pkey->pkey.r
sa) <= 0) |
| 77 { |
| 78 - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_L
IB); |
| 79 + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_RSA_
LIB); |
| 80 goto err; |
| 81 } |
| 82 - s2n(u,p); |
| 83 - n=u+2; |
| 84 + s2n(signature_length, p); |
| 85 + n = signature_length + 2; |
| 86 } |
| 87 else |
| 88 #endif |
| 89 #ifndef OPENSSL_NO_DSA |
| 90 - if (pkey->type == EVP_PKEY_DSA) |
| 91 + if (pkey->type == EVP_PKEY_DSA) |
| 92 { |
| 93 - if (!DSA_sign(pkey->save_type, |
| 94 - &(data[MD5_DIGEST_LENGTH]), |
| 95 - SHA_DIGEST_LENGTH,&(p[2]), |
| 96 - (unsigned int *)&j,pkey->pkey.dsa)) |
| 97 + s->method->ssl3_enc->cert_verify_mac(s, NID_sha1, data); |
| 98 + if (!DSA_sign(pkey->save_type, data, |
| 99 + SHA_DIGEST_LENGTH, &(p[2]), |
| 100 + &signature_length, pkey->pkey.dsa)) |
| 101 { |
| 102 - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_DSA_L
IB); |
| 103 + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_DSA_
LIB); |
| 104 goto err; |
| 105 } |
| 106 - s2n(j,p); |
| 107 - n=j+2; |
| 108 + s2n(signature_length, p); |
| 109 + n = signature_length + 2; |
| 110 } |
| 111 else |
| 112 #endif |
| 113 #ifndef OPENSSL_NO_ECDSA |
| 114 - if (pkey->type == EVP_PKEY_EC) |
| 115 + if (pkey->type == EVP_PKEY_EC) |
| 116 { |
| 117 - if (!ECDSA_sign(pkey->save_type, |
| 118 - &(data[MD5_DIGEST_LENGTH]), |
| 119 - SHA_DIGEST_LENGTH,&(p[2]), |
| 120 - (unsigned int *)&j,pkey->pkey.ec)) |
| 121 + s->method->ssl3_enc->cert_verify_mac(s, NID_sha1, data); |
| 122 + if (!ECDSA_sign(pkey->save_type, data, |
| 123 + SHA_DIGEST_LENGTH, &(p[2]), |
| 124 + &signature_length, pkey->pkey.ec)) |
| 125 { |
| 126 - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, |
| 127 - ERR_R_ECDSA_LIB); |
| 128 + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_ECDS
A_LIB); |
| 129 goto err; |
| 130 } |
| 131 - s2n(j,p); |
| 132 - n=j+2; |
| 133 + s2n(signature_length, p); |
| 134 + n = signature_length + 2; |
| 135 } |
| 136 else |
| 137 #endif |
| 138 if (pkey->type == NID_id_GostR3410_94 || pkey->type == NID_id_Go
stR3410_2001) |
| 139 - { |
| 140 - unsigned char signbuf[64]; |
| 141 - int i; |
| 142 - size_t sigsize=64; |
| 143 - s->method->ssl3_enc->cert_verify_mac(s, |
| 144 - NID_id_GostR3411_94, |
| 145 - data); |
| 146 - if (EVP_PKEY_sign(pctx, signbuf, &sigsize, data, 32) <= 0) { |
| 147 - SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, |
| 148 - ERR_R_INTERNAL_ERROR); |
| 149 - goto err; |
| 150 - } |
| 151 - for (i=63,j=0; i>=0; j++, i--) { |
| 152 - p[2+j]=signbuf[i]; |
| 153 - } |
| 154 - s2n(j,p); |
| 155 - n=j+2; |
| 156 - } |
| 157 + { |
| 158 + unsigned char signbuf[64]; |
| 159 + int i, j; |
| 160 + size_t sigsize=64; |
| 161 + |
| 162 + s->method->ssl3_enc->cert_verify_mac(s, |
| 163 + NID_id_GostR3411_94, |
| 164 + data); |
| 165 + pctx = EVP_PKEY_CTX_new(pkey, NULL); |
| 166 + EVP_PKEY_sign_init(pctx); |
| 167 + if (EVP_PKEY_sign(pctx, signbuf, &sigsize, data, 32) <=
0) { |
| 168 + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, |
| 169 + ERR_R_INTERNAL_ERROR); |
| 170 + goto err; |
| 171 + } |
| 172 + for (i=63,j=0; i>=0; j++, i--) { |
| 173 + p[2+j]=signbuf[i]; |
| 174 + } |
| 175 + s2n(j,p); |
| 176 + n=j+2; |
| 177 + } |
| 178 else |
| 179 - { |
| 180 + { |
| 181 SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_INTERNAL_ERRO
R); |
| 182 goto err; |
| 183 - } |
| 184 + } |
| 185 *(d++)=SSL3_MT_CERTIFICATE_VERIFY; |
| 186 l2n3(n,d); |
| 187 |
OLD | NEW |