version 1.72, 2018/10/11 00:52:46 |
version 1.73, 2019/01/21 09:54:11 |
|
|
ret = SSH_ERR_ALLOC_FAIL; |
ret = SSH_ERR_ALLOC_FAIL; |
goto out; |
goto out; |
} |
} |
if ((rsa_e = BN_new()) == NULL || |
if (sshbuf_get_bignum2(b, &rsa_e) != 0 || |
(rsa_n = BN_new()) == NULL) { |
sshbuf_get_bignum2(b, &rsa_n) != 0) { |
ret = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
|
} |
|
if (sshbuf_get_bignum2(b, rsa_e) != 0 || |
|
sshbuf_get_bignum2(b, rsa_n) != 0) { |
|
ret = SSH_ERR_INVALID_FORMAT; |
ret = SSH_ERR_INVALID_FORMAT; |
goto out; |
goto out; |
} |
} |
|
|
ret = SSH_ERR_ALLOC_FAIL; |
ret = SSH_ERR_ALLOC_FAIL; |
goto out; |
goto out; |
} |
} |
if ((dsa_p = BN_new()) == NULL || |
if (sshbuf_get_bignum2(b, &dsa_p) != 0 || |
(dsa_q = BN_new()) == NULL || |
sshbuf_get_bignum2(b, &dsa_q) != 0 || |
(dsa_g = BN_new()) == NULL || |
sshbuf_get_bignum2(b, &dsa_g) != 0 || |
(dsa_pub_key = BN_new()) == NULL) { |
sshbuf_get_bignum2(b, &dsa_pub_key) != 0) { |
ret = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
|
} |
|
if (sshbuf_get_bignum2(b, dsa_p) != 0 || |
|
sshbuf_get_bignum2(b, dsa_q) != 0 || |
|
sshbuf_get_bignum2(b, dsa_g) != 0 || |
|
sshbuf_get_bignum2(b, dsa_pub_key) != 0) { |
|
ret = SSH_ERR_INVALID_FORMAT; |
ret = SSH_ERR_INVALID_FORMAT; |
goto out; |
goto out; |
} |
} |
|
|
r = SSH_ERR_ALLOC_FAIL; |
r = SSH_ERR_ALLOC_FAIL; |
goto out; |
goto out; |
} |
} |
if ((dsa_p = BN_new()) == NULL || |
if ((r = sshbuf_get_bignum2(buf, &dsa_p)) != 0 || |
(dsa_q = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &dsa_q)) != 0 || |
(dsa_g = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &dsa_g)) != 0 || |
(dsa_pub_key = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &dsa_pub_key)) != 0 || |
(dsa_priv_key = BN_new()) == NULL) { |
(r = sshbuf_get_bignum2(buf, &dsa_priv_key)) != 0) |
r = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
goto out; |
} |
|
if ((r = sshbuf_get_bignum2(buf, dsa_p)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, dsa_q)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, dsa_g)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, dsa_pub_key)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, dsa_priv_key)) != 0) |
|
goto out; |
|
if (!DSA_set0_pqg(k->dsa, dsa_p, dsa_q, dsa_g)) { |
if (!DSA_set0_pqg(k->dsa, dsa_p, dsa_q, dsa_g)) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
goto out; |
goto out; |
|
|
dsa_pub_key = dsa_priv_key = NULL; /* transferred */ |
dsa_pub_key = dsa_priv_key = NULL; /* transferred */ |
break; |
break; |
case KEY_DSA_CERT: |
case KEY_DSA_CERT: |
if ((dsa_priv_key = BN_new()) == NULL) { |
|
r = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
|
} |
|
if ((r = sshkey_froms(buf, &k)) != 0 || |
if ((r = sshkey_froms(buf, &k)) != 0 || |
(r = sshbuf_get_bignum2(buf, dsa_priv_key)) != 0) |
(r = sshbuf_get_bignum2(buf, &dsa_priv_key)) != 0) |
goto out; |
goto out; |
if (!DSA_set0_key(k->dsa, NULL, dsa_priv_key)) { |
if (!DSA_set0_key(k->dsa, NULL, dsa_priv_key)) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
|
|
goto out; |
goto out; |
} |
} |
k->ecdsa = EC_KEY_new_by_curve_name(k->ecdsa_nid); |
k->ecdsa = EC_KEY_new_by_curve_name(k->ecdsa_nid); |
if (k->ecdsa == NULL || (exponent = BN_new()) == NULL) { |
if (k->ecdsa == NULL) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
goto out; |
goto out; |
} |
} |
if ((r = sshbuf_get_eckey(buf, k->ecdsa)) != 0 || |
if ((r = sshbuf_get_eckey(buf, k->ecdsa)) != 0 || |
(r = sshbuf_get_bignum2(buf, exponent))) |
(r = sshbuf_get_bignum2(buf, &exponent))) |
goto out; |
goto out; |
if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { |
if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
|
|
goto out; |
goto out; |
break; |
break; |
case KEY_ECDSA_CERT: |
case KEY_ECDSA_CERT: |
if ((exponent = BN_new()) == NULL) { |
|
r = SSH_ERR_LIBCRYPTO_ERROR; |
|
goto out; |
|
} |
|
if ((r = sshkey_froms(buf, &k)) != 0 || |
if ((r = sshkey_froms(buf, &k)) != 0 || |
(r = sshbuf_get_bignum2(buf, exponent)) != 0) |
(r = sshbuf_get_bignum2(buf, &exponent)) != 0) |
goto out; |
goto out; |
if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { |
if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
|
|
r = SSH_ERR_ALLOC_FAIL; |
r = SSH_ERR_ALLOC_FAIL; |
goto out; |
goto out; |
} |
} |
if ((rsa_n = BN_new()) == NULL || |
if ((r = sshbuf_get_bignum2(buf, &rsa_n)) != 0 || |
(rsa_e = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &rsa_e)) != 0 || |
(rsa_d = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &rsa_d)) != 0 || |
(rsa_iqmp = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &rsa_iqmp)) != 0 || |
(rsa_p = BN_new()) == NULL || |
(r = sshbuf_get_bignum2(buf, &rsa_p)) != 0 || |
(rsa_q = BN_new()) == NULL) { |
(r = sshbuf_get_bignum2(buf, &rsa_q)) != 0) |
r = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
goto out; |
} |
|
if ((r = sshbuf_get_bignum2(buf, rsa_n)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, rsa_e)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, rsa_d)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, rsa_iqmp)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, rsa_p)) != 0 || |
|
(r = sshbuf_get_bignum2(buf, rsa_q)) != 0) |
|
goto out; |
|
if (!RSA_set0_key(k->rsa, rsa_n, rsa_e, rsa_d)) { |
if (!RSA_set0_key(k->rsa, rsa_n, rsa_e, rsa_d)) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |
goto out; |
goto out; |
|
|
goto out; |
goto out; |
break; |
break; |
case KEY_RSA_CERT: |
case KEY_RSA_CERT: |
if ((rsa_d = BN_new()) == NULL || |
|
(rsa_iqmp = BN_new()) == NULL || |
|
(rsa_p = BN_new()) == NULL || |
|
(rsa_q = BN_new()) == NULL) { |
|
r = SSH_ERR_ALLOC_FAIL; |
|
goto out; |
|
} |
|
if ((r = sshkey_froms(buf, &k)) != 0 || |
if ((r = sshkey_froms(buf, &k)) != 0 || |
(r = sshbuf_get_bignum2(buf, rsa_d)) != 0 || |
(r = sshbuf_get_bignum2(buf, &rsa_d)) != 0 || |
(r = sshbuf_get_bignum2(buf, rsa_iqmp)) != 0 || |
(r = sshbuf_get_bignum2(buf, &rsa_iqmp)) != 0 || |
(r = sshbuf_get_bignum2(buf, rsa_p)) != 0 || |
(r = sshbuf_get_bignum2(buf, &rsa_p)) != 0 || |
(r = sshbuf_get_bignum2(buf, rsa_q)) != 0) |
(r = sshbuf_get_bignum2(buf, &rsa_q)) != 0) |
goto out; |
goto out; |
if (!RSA_set0_key(k->rsa, NULL, NULL, rsa_d)) { |
if (!RSA_set0_key(k->rsa, NULL, NULL, rsa_d)) { |
r = SSH_ERR_LIBCRYPTO_ERROR; |
r = SSH_ERR_LIBCRYPTO_ERROR; |