diff options
author | Damien Miller <djm@mindrot.org> | 2014-07-02 15:28:02 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2014-07-02 15:28:02 +1000 |
commit | 8668706d0f52654fe64c0ca41a96113aeab8d2b8 (patch) | |
tree | 73e78e1ea3d39206e39870bbe0af17d6c430fb51 /digest-libc.c | |
parent | 2cd7929250cf9e9f658d70dcd452f529ba08c942 (diff) |
- djm@cvs.openbsd.org 2014/06/24 01:13:21
[Makefile.in auth-bsdauth.c auth-chall.c auth-options.c auth-rsa.c
[auth2-none.c auth2-pubkey.c authfile.c authfile.h cipher-3des1.c
[cipher-chachapoly.c cipher-chachapoly.h cipher.c cipher.h
[digest-libc.c digest-openssl.c digest.h dns.c entropy.c hmac.h
[hostfile.c key.c key.h krl.c monitor.c packet.c rsa.c rsa.h
[ssh-add.c ssh-agent.c ssh-dss.c ssh-ecdsa.c ssh-ed25519.c
[ssh-keygen.c ssh-pkcs11-client.c ssh-pkcs11-helper.c ssh-pkcs11.c
[ssh-rsa.c sshbuf-misc.c sshbuf.h sshconnect.c sshconnect1.c
[sshconnect2.c sshd.c sshkey.c sshkey.h
[openbsd-compat/openssl-compat.c openbsd-compat/openssl-compat.h]
New key API: refactor key-related functions to be more library-like,
existing API is offered as a set of wrappers.
with and ok markus@
Thanks also to Ben Hawkes, David Tomaschik, Ivan Fratric, Matthew
Dempsky and Ron Bowes for a detailed review a few months ago.
NB. This commit also removes portable OpenSSH support for OpenSSL
<0.9.8e.
Diffstat (limited to 'digest-libc.c')
-rw-r--r-- | digest-libc.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/digest-libc.c b/digest-libc.c index 1804b0698..1b4423a05 100644 --- a/digest-libc.c +++ b/digest-libc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: digest-libc.c,v 1.2 2014/02/02 03:44:31 djm Exp $ */ | 1 | /* $OpenBSD: digest-libc.c,v 1.3 2014/06/24 01:13:21 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2013 Damien Miller <djm@mindrot.org> | 3 | * Copyright (c) 2013 Damien Miller <djm@mindrot.org> |
4 | * Copyright (c) 2014 Markus Friedl. All rights reserved. | 4 | * Copyright (c) 2014 Markus Friedl. All rights reserved. |
@@ -28,7 +28,8 @@ | |||
28 | #include <sha1.h> | 28 | #include <sha1.h> |
29 | #include <sha2.h> | 29 | #include <sha2.h> |
30 | 30 | ||
31 | #include "buffer.h" | 31 | #include "ssherr.h" |
32 | #include "sshbuf.h" | ||
32 | #include "digest.h" | 33 | #include "digest.h" |
33 | 34 | ||
34 | typedef void md_init_fn(void *mdctx); | 35 | typedef void md_init_fn(void *mdctx); |
@@ -164,7 +165,7 @@ ssh_digest_copy_state(struct ssh_digest_ctx *from, struct ssh_digest_ctx *to) | |||
164 | const struct ssh_digest *digest = ssh_digest_by_alg(from->alg); | 165 | const struct ssh_digest *digest = ssh_digest_by_alg(from->alg); |
165 | 166 | ||
166 | if (digest == NULL || from->alg != to->alg) | 167 | if (digest == NULL || from->alg != to->alg) |
167 | return -1; | 168 | return SSH_ERR_INVALID_ARGUMENT; |
168 | memcpy(to->mdctx, from->mdctx, digest->ctx_len); | 169 | memcpy(to->mdctx, from->mdctx, digest->ctx_len); |
169 | return 0; | 170 | return 0; |
170 | } | 171 | } |
@@ -175,15 +176,15 @@ ssh_digest_update(struct ssh_digest_ctx *ctx, const void *m, size_t mlen) | |||
175 | const struct ssh_digest *digest = ssh_digest_by_alg(ctx->alg); | 176 | const struct ssh_digest *digest = ssh_digest_by_alg(ctx->alg); |
176 | 177 | ||
177 | if (digest == NULL) | 178 | if (digest == NULL) |
178 | return -1; | 179 | return SSH_ERR_INVALID_ARGUMENT; |
179 | digest->md_update(ctx->mdctx, m, mlen); | 180 | digest->md_update(ctx->mdctx, m, mlen); |
180 | return 0; | 181 | return 0; |
181 | } | 182 | } |
182 | 183 | ||
183 | int | 184 | int |
184 | ssh_digest_update_buffer(struct ssh_digest_ctx *ctx, const Buffer *b) | 185 | ssh_digest_update_buffer(struct ssh_digest_ctx *ctx, const struct sshbuf *b) |
185 | { | 186 | { |
186 | return ssh_digest_update(ctx, buffer_ptr(b), buffer_len(b)); | 187 | return ssh_digest_update(ctx, sshbuf_ptr(b), sshbuf_len(b)); |
187 | } | 188 | } |
188 | 189 | ||
189 | int | 190 | int |
@@ -192,11 +193,11 @@ ssh_digest_final(struct ssh_digest_ctx *ctx, u_char *d, size_t dlen) | |||
192 | const struct ssh_digest *digest = ssh_digest_by_alg(ctx->alg); | 193 | const struct ssh_digest *digest = ssh_digest_by_alg(ctx->alg); |
193 | 194 | ||
194 | if (digest == NULL) | 195 | if (digest == NULL) |
195 | return -1; | 196 | return SSH_ERR_INVALID_ARGUMENT; |
196 | if (dlen > UINT_MAX) | 197 | if (dlen > UINT_MAX) |
197 | return -1; | 198 | return SSH_ERR_INVALID_ARGUMENT; |
198 | if (dlen < digest->digest_len) /* No truncation allowed */ | 199 | if (dlen < digest->digest_len) /* No truncation allowed */ |
199 | return -1; | 200 | return SSH_ERR_INVALID_ARGUMENT; |
200 | digest->md_final(d, ctx->mdctx); | 201 | digest->md_final(d, ctx->mdctx); |
201 | return 0; | 202 | return 0; |
202 | } | 203 | } |
@@ -223,16 +224,16 @@ ssh_digest_memory(int alg, const void *m, size_t mlen, u_char *d, size_t dlen) | |||
223 | struct ssh_digest_ctx *ctx = ssh_digest_start(alg); | 224 | struct ssh_digest_ctx *ctx = ssh_digest_start(alg); |
224 | 225 | ||
225 | if (ctx == NULL) | 226 | if (ctx == NULL) |
226 | return -1; | 227 | return SSH_ERR_INVALID_ARGUMENT; |
227 | if (ssh_digest_update(ctx, m, mlen) != 0 || | 228 | if (ssh_digest_update(ctx, m, mlen) != 0 || |
228 | ssh_digest_final(ctx, d, dlen) != 0) | 229 | ssh_digest_final(ctx, d, dlen) != 0) |
229 | return -1; | 230 | return SSH_ERR_INVALID_ARGUMENT; |
230 | ssh_digest_free(ctx); | 231 | ssh_digest_free(ctx); |
231 | return 0; | 232 | return 0; |
232 | } | 233 | } |
233 | 234 | ||
234 | int | 235 | int |
235 | ssh_digest_buffer(int alg, const Buffer *b, u_char *d, size_t dlen) | 236 | ssh_digest_buffer(int alg, const struct sshbuf *b, u_char *d, size_t dlen) |
236 | { | 237 | { |
237 | return ssh_digest_memory(alg, buffer_ptr(b), buffer_len(b), d, dlen); | 238 | return ssh_digest_memory(alg, sshbuf_ptr(b), sshbuf_len(b), d, dlen); |
238 | } | 239 | } |