Sat, 22 Jun 2019 16:36:52 +0200
move some properties to new namespace
for properties encryption we need to decide which props must be encrypted and the plan is, to decide by namespace
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
404
5c08b8e14df8
updates copyright notice
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
367
diff
changeset
|
4 | * Copyright 2018 Olaf Wintermann. All rights reserved. |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include <stdio.h> |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #include <stdlib.h> |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <string.h> |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
32 | #include <unistd.h> |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
33 | #include <fcntl.h> |
506
ceed7714846a
fixes crash in dav-sync archive command when trying to remove resources from the db
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
505
diff
changeset
|
34 | #include "utils.h" |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | #include "crypto.h" |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
38 | /* -------------------- OpenSSL Crypto Functions -------------------- */ |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
39 | #ifdef DAV_USE_OPENSSL |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
40 | |
261
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
41 | #if OPENSSL_VERSION_NUMBER < 10000000 |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
42 | |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
43 | static EVP_CIPHER_CTX* create_evp_cipher_ctx() { |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
44 | EVP_CIPHER_CTX *ctx = malloc(sizeof(EVP_CIPHER_CTX)); |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
45 | EVP_CIPHER_CTX_init(ctx); |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
46 | return ctx; |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
47 | } |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
48 | |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
49 | static void free_evp_cipher_ctx(EVP_CIPHER_CTX *ctx) { |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
50 | EVP_CIPHER_CTX_cleanup(ctx); |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
51 | free(ctx); |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
52 | } |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
53 | |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
54 | #define EVP_CIPHER_CTX_new() create_evp_cipher_ctx() |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
55 | #define EVP_CIPHER_CTX_free(ctx) free_evp_cipher_ctx(ctx) |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
56 | |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
57 | #endif |
f60d742a62a0
fixes build with ancient openssl
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
260
diff
changeset
|
58 | |
470
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
59 | int dav_rand_bytes(unsigned char *buf, size_t len) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
60 | return !RAND_bytes(buf, len); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
61 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
62 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | AESDecrypter* aes_decrypter_new(DavKey *key, void *stream, dav_write_func write_func) { |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
64 | AESDecrypter *dec = calloc(1, sizeof(AESDecrypter)); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
65 | SHA256_Init(&dec->sha256); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | dec->stream = stream; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | dec->write = write_func; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | dec->key = key; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | dec->init = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | dec->ivpos = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | return dec; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | void aes_decrypter_init(AESDecrypter *dec) { |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
76 | //EVP_CIPHER_CTX_init(&dec->ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
77 | dec->ctx = EVP_CIPHER_CTX_new(); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | dec->init = 1; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | if(dec->key->type == DAV_KEY_AES128) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | EVP_DecryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
81 | dec->ctx, |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | EVP_aes_128_cbc(), |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | NULL, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | dec->key->data, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | dec->ivtmp); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | } else if(dec->key->type == DAV_KEY_AES256) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | EVP_DecryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
88 | dec->ctx, |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | EVP_aes_256_cbc(), |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | NULL, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | dec->key->data, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | dec->ivtmp); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | } else { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | fprintf(stderr, "unknown key type\n"); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | exit(-1); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | size_t aes_write(const void *buf, size_t s, size_t n, AESDecrypter *dec) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | int len = s*n; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | if(!dec->init) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | size_t n = 16 - dec->ivpos; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | size_t cp = n > len ? len : n; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | memcpy(dec->ivtmp + dec->ivpos, buf, cp); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | dec->ivpos += cp; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | if(dec->ivpos >= 16) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | aes_decrypter_init(dec); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | if(len == cp) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | return len; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | } else { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
112 | buf = (char*)buf + cp; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | len -= cp; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | int outlen = len + 16; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | unsigned char *out = malloc(outlen); |
470
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
119 | EVP_DecryptUpdate(dec->ctx, out, &outlen, buf, len); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
120 | ssize_t wlen = dec->write(out, 1, outlen, dec->stream); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
121 | SHA256_Update(&dec->sha256, out, wlen); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
122 | free(out); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
123 | return (s*n) / s; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
124 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
125 | |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
126 | void aes_decrypter_shutdown(AESDecrypter *dec) { |
237
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
127 | if(dec->init) { |
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
128 | void *out = malloc(128); |
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
129 | int len = 0; |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
130 | EVP_DecryptFinal_ex(dec->ctx, out, &len); |
237
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
131 | dec->write(out, 1, len, dec->stream); |
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
132 | SHA256_Update(&dec->sha256, out, len); |
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
133 | free(out); |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
134 | //EVP_CIPHER_CTX_cleanup(&dec->ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
135 | EVP_CIPHER_CTX_free(dec->ctx); |
237
fd9135bc7580
fixed crash when encrypted streams are empty
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
207
diff
changeset
|
136 | } |
207
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
137 | } |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
138 | |
de23f8881e9f
fixed hash verification and head requests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
185
diff
changeset
|
139 | void aes_decrypter_close(AESDecrypter *dec) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | free(dec); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
143 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
144 | AESEncrypter* aes_encrypter_new(DavKey *key, void *stream, dav_read_func read_func, dav_seek_func seek_func) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | unsigned char *iv = malloc(16); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | if(!RAND_bytes(iv, 16)) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | free(iv); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
148 | return NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
149 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
150 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
151 | AESEncrypter *enc = malloc(sizeof(AESEncrypter)); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
152 | SHA256_Init(&enc->sha256); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | enc->stream = stream; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
154 | enc->read = read_func; |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
155 | enc->seek = seek_func; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | enc->tmp = NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
157 | enc->tmplen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | enc->tmpoff = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | enc->end = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | enc->iv = iv; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | enc->ivlen = 16; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
162 | |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
163 | //EVP_CIPHER_CTX_init(&enc->ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
164 | enc->ctx = EVP_CIPHER_CTX_new(); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | if(key->type == DAV_KEY_AES128) { |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
166 | EVP_EncryptInit_ex(enc->ctx, EVP_aes_128_cbc(), NULL, key->data, enc->iv); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | } else if(key->type == DAV_KEY_AES256) { |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
168 | EVP_EncryptInit_ex(enc->ctx, EVP_aes_256_cbc(), NULL, key->data, enc->iv); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | } else { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | fprintf(stderr, "unknown key type\n"); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | exit(-1); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | return enc; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | size_t aes_read(void *buf, size_t s, size_t n, AESEncrypter *enc) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | size_t len = s*n; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | if(enc->tmp) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
179 | size_t tmp_diff = enc->tmplen - enc->tmpoff; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | size_t cp_len = tmp_diff > len ? len : tmp_diff; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | memcpy(buf, enc->tmp + enc->tmpoff, cp_len); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | enc->tmpoff += cp_len; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | if(enc->tmpoff >= enc->tmplen) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | free(enc->tmp); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | enc->tmp = NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
186 | enc->tmplen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | enc->tmpoff = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | return cp_len / s; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | if(enc->end) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | return 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | void *in = malloc(len); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
197 | size_t in_len = enc->read(in, 1, len, enc->stream); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
199 | SHA256_Update(&enc->sha256, in, in_len); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
200 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | unsigned char *out = NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | int outlen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
203 | size_t ivl = enc->ivlen; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | if(in_len != 0) { |
459
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
205 | outlen = len + 32; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | out = malloc(outlen + ivl); |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
207 | if(ivl > 0) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
208 | memcpy(out, enc->iv, ivl); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | } |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
210 | EVP_EncryptUpdate(enc->ctx, out + ivl, &outlen, in, in_len); |
459
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
211 | if(in_len != len) { |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
212 | int newoutlen = 16; |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
213 | EVP_EncryptFinal_ex(enc->ctx, out + ivl + outlen, &newoutlen); |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
214 | outlen += newoutlen; |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
215 | enc->end = 1; |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
216 | } |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | } else { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | out = malloc(16); |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
219 | EVP_EncryptFinal_ex(enc->ctx, out, &outlen); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | enc->end = 1; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | enc->tmp = (char*)out; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | enc->tmplen = outlen + ivl; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | enc->tmpoff = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
226 | if(enc->ivlen > 0) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | enc->ivlen = 0; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | |
459
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
230 | free(in); |
2c112cbaa08e
aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
404
diff
changeset
|
231 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | return aes_read(buf, s, n, enc); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | void aes_encrypter_close(AESEncrypter *enc) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | if(enc->tmp) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | free(enc->tmp); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | } |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
239 | if(enc->iv) { |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
240 | free(enc->iv); |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
241 | } |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
242 | //EVP_CIPHER_CTX_cleanup(&enc->ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
243 | EVP_CIPHER_CTX_free(enc->ctx); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | free(enc); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
247 | int aes_encrypter_reset(AESEncrypter *enc, curl_off_t offset, int origin) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
248 | if(origin != SEEK_SET || offset != 0 || !enc->seek) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
249 | return CURL_SEEKFUNC_CANTSEEK; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
250 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
251 | |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
252 | enc->ivlen = 16; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
253 | if(enc->seek(enc->stream, 0, SEEK_SET) != 0) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
254 | return CURL_SEEKFUNC_FAIL; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
255 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
256 | return CURL_SEEKFUNC_OK; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
257 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
258 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
259 | |
505 | 260 | char* aes_encrypt(const char *in, size_t len, DavKey *key) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
261 | unsigned char iv[16]; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
262 | if(!RAND_bytes(iv, 16)) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
263 | return NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
264 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
265 | |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
266 | //EVP_CIPHER_CTX ctx; |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
267 | //EVP_CIPHER_CTX_init(&ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
268 | EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
269 | if(key->type == DAV_KEY_AES128) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
270 | EVP_EncryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
271 | ctx, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
272 | EVP_aes_128_cbc(), |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
273 | NULL, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
274 | (unsigned char*)key->data, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
275 | iv); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
276 | } else if(key->type == DAV_KEY_AES256) { |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
277 | EVP_EncryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
278 | ctx, |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
279 | EVP_aes_256_cbc(), |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
280 | NULL, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
281 | (unsigned char*)key->data, |
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
282 | iv); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
283 | } else { |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
284 | //EVP_CIPHER_CTX_cleanup(&ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
285 | EVP_CIPHER_CTX_free(ctx); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | return NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
289 | //int len = strlen(in); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | int buflen = len + 64; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
291 | unsigned char *buf = calloc(1, buflen); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
292 | memcpy(buf, iv, 16); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
293 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
294 | int l = buflen - 16; |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
295 | EVP_EncryptUpdate(ctx, buf + 16, &l, (unsigned char*)in, len); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
296 | |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | int f = 0; |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
298 | EVP_EncryptFinal_ex(ctx, buf + 16 + l, &f); |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
299 | char *out = util_base64encode((char*)buf, 16 + l + f); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | free(buf); |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
301 | EVP_CIPHER_CTX_free(ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
302 | //EVP_CIPHER_CTX_cleanup(&ctx); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
303 | |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | return out; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | |
505 | 307 | char* aes_decrypt(const char *in, size_t *length, DavKey *key) { |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
308 | int len; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
309 | unsigned char *buf = (unsigned char*)util_base64decode_len(in, &len); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
310 | |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
311 | //EVP_CIPHER_CTX ctx; |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
312 | //EVP_CIPHER_CTX_init(&ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
313 | EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
314 | if(key->type == DAV_KEY_AES128) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
315 | EVP_DecryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
316 | ctx, |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | EVP_aes_128_cbc(), |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
318 | NULL, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | key->data, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | buf); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | } else if(key->type == DAV_KEY_AES256) { |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
322 | EVP_DecryptInit_ex( |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
323 | ctx, |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
324 | EVP_aes_256_cbc(), |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | NULL, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
326 | key->data, |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
327 | buf); |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
328 | } else { |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
329 | //EVP_CIPHER_CTX_cleanup(&ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
330 | EVP_CIPHER_CTX_free(ctx); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | return NULL; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
332 | } |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
333 | |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
334 | unsigned char *out = malloc(len + 1); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
335 | int outlen = len; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
336 | unsigned char *in_buf = buf + 16; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
337 | int inlen = len - 16; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
338 | int f = 0; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
339 | |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
340 | EVP_DecryptUpdate(ctx, out, &outlen, in_buf, inlen); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
341 | EVP_DecryptFinal_ex(ctx, out + outlen, &f); |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
342 | out[outlen + f] = '\0'; |
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
343 | free(buf); |
260
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
344 | //EVP_CIPHER_CTX_cleanup(&ctx); |
26f5f817429e
fixes build with openssl 1.1
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
237
diff
changeset
|
345 | EVP_CIPHER_CTX_free(ctx); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
346 | |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
347 | *length = outlen + f; |
43
03076907b58a
added file name encryption
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
40
diff
changeset
|
348 | return (char*)out; |
40
a95ee94b9204
supports whitespace in paths
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
349 | } |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
350 | |
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
351 | |
354
067ea2315a8a
moves auth prompt functionality to libidav
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
349
diff
changeset
|
352 | void dav_get_hash(DAV_SHA_CTX *sha256, unsigned char *buf){ |
155
b85248a8aee2
fixed some cases of incompatible types in crypto functions
Mike Becker <universe@uap-core.de>
parents:
150
diff
changeset
|
353 | SHA256_Final((unsigned char*)buf, sha256); |
150
37fb12574acd
added checksums for encrypted resources
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
75
diff
changeset
|
354 | } |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
355 | |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
356 | char* dav_create_hash(const char *data, size_t len) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
357 | unsigned char hash[DAV_SHA256_DIGEST_LENGTH]; |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
358 | SHA256((const unsigned char*)data, len, hash); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
359 | return util_hexstr(hash, DAV_SHA256_DIGEST_LENGTH); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
360 | } |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
361 | |
520
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
362 | DAV_SHA_CTX* dav_hash_init(void) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
363 | DAV_SHA_CTX *ctx = malloc(sizeof(DAV_SHA_CTX)); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
364 | SHA256_Init(ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
365 | return ctx; |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
366 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
367 | |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
368 | void dav_hash_update(DAV_SHA_CTX *ctx, const char *data, size_t len) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
369 | SHA256_Update(ctx, data, len); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
370 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
371 | |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
372 | void dav_hash_final(DAV_SHA_CTX *ctx, unsigned char *buf) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
373 | SHA256_Final(buf, ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
374 | free(ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
375 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
376 | |
515
2465dd550bb5
fixes signedness of salt in dav_pw2key()
Mike Becker <universe@uap-core.de>
parents:
506
diff
changeset
|
377 | DavKey* dav_pw2key(const char *password, const unsigned char *salt, int saltlen, int pwfunc, int enc) { |
470
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
378 | if(!password) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
379 | return NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
380 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
381 | size_t len = strlen(password); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
382 | if(len == 0) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
383 | return NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
384 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
385 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
386 | // setup key data and length |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
387 | unsigned char keydata[32]; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
388 | int keylen = 32; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
389 | switch(enc) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
390 | case DAV_KEY_AES128: keylen = 16; break; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
391 | case DAV_KEY_AES256: keylen = 32; break; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
392 | default: return NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
393 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
394 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
395 | // generate key |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
396 | switch(pwfunc) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
397 | case DAV_PWFUNC_PBKDF2_SHA256: { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
398 | PKCS5_PBKDF2_HMAC( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
399 | password, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
400 | len, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
401 | salt, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
402 | saltlen, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
403 | DAV_CRYPTO_ITERATION_COUNT, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
404 | EVP_sha256(), |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
405 | keylen, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
406 | keydata); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
407 | break; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
408 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
409 | case DAV_PWFUNC_PBKDF2_SHA512: { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
410 | PKCS5_PBKDF2_HMAC( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
411 | password, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
412 | len, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
413 | salt, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
414 | saltlen, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
415 | DAV_CRYPTO_ITERATION_COUNT, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
416 | EVP_sha512(), |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
417 | keylen, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
418 | keydata); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
419 | break; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
420 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
421 | default: return NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
422 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
423 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
424 | // create DavKey with generated data |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
425 | DavKey *key = malloc(sizeof(DavKey)); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
426 | key->data = malloc(keylen); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
427 | key->length = keylen; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
428 | key->name = NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
429 | key->type = enc; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
430 | memcpy(key->data, keydata, keylen); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
431 | return key; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
432 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
433 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
434 | #endif |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
435 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
436 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
437 | /* -------------------- Apple Crypto Functions -------------------- */ |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
438 | #ifdef __APPLE__ |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
439 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
440 | #define RANDOM_BUFFER_LENGTH 256 |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
441 | static char randbuf[RANDOM_BUFFER_LENGTH]; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
442 | static int rbufpos = RANDOM_BUFFER_LENGTH; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
443 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
444 | int dav_rand_bytes(unsigned char *buf, size_t len) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
445 | if(len + rbufpos > RANDOM_BUFFER_LENGTH) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
446 | int devr = open("/dev/urandom", O_RDONLY); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
447 | if(devr == -1) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
448 | return 1; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
449 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
450 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
451 | if(read(devr, randbuf, RANDOM_BUFFER_LENGTH) < RANDOM_BUFFER_LENGTH) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
452 | close(devr); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
453 | return 1; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
454 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
455 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
456 | rbufpos = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
457 | if(len > RANDOM_BUFFER_LENGTH) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
458 | int err = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
459 | if(read(devr, buf, len) < len) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
460 | err = 1; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
461 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
462 | close(devr); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
463 | return err; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
464 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
465 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
466 | close(devr); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
467 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
468 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
469 | char *r = randbuf; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
470 | memcpy(buf, r + rbufpos, len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
471 | rbufpos += len; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
472 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
473 | return 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
474 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
475 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
476 | AESDecrypter* aes_decrypter_new(DavKey *key, void *stream, dav_write_func write_func) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
477 | AESDecrypter *dec = calloc(1, sizeof(AESDecrypter)); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
478 | CC_SHA256_Init(&dec->sha256); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
479 | dec->stream = stream; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
480 | dec->write = write_func; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
481 | dec->key = key; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
482 | dec->init = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
483 | dec->ivpos = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
484 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
485 | return dec; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
486 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
487 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
488 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
489 | void aes_decrypter_init(AESDecrypter *dec) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
490 | //EVP_CIPHER_CTX_init(&dec->ctx); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
491 | dec->init = 1; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
492 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
493 | CCCryptorRef cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
494 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
495 | if(dec->key->type == DAV_KEY_AES128) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
496 | status = CCCryptorCreate(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, dec->key->data, dec->key->length, dec->ivtmp, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
497 | } else if(dec->key->type == DAV_KEY_AES256) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
498 | status = CCCryptorCreate(kCCDecrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, dec->key->data, dec->key->length, dec->ivtmp, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
499 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
500 | fprintf(stderr, "unknown key type\n"); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
501 | exit(-1); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
502 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
503 | dec->ctx = cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
504 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
505 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
506 | size_t aes_write(const void *buf, size_t s, size_t n, AESDecrypter *dec) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
507 | int len = s*n; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
508 | if(!dec->init) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
509 | size_t n = 16 - dec->ivpos; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
510 | size_t cp = n > len ? len : n; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
511 | memcpy(dec->ivtmp + dec->ivpos, buf, cp); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
512 | dec->ivpos += cp; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
513 | if(dec->ivpos >= 16) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
514 | aes_decrypter_init(dec); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
515 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
516 | if(len == cp) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
517 | return len; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
518 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
519 | buf = (char*)buf + cp; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
520 | len -= cp; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
521 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
522 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
523 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
524 | int outlen = len + 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
525 | unsigned char *out = malloc(outlen); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
526 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
527 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
528 | size_t avail = outlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
529 | size_t moved = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
530 | status = CCCryptorUpdate(dec->ctx, buf, len, out, avail, &moved); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
531 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
532 | ssize_t wlen = dec->write(out, 1, moved, dec->stream); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
533 | CC_SHA256_Update(&dec->sha256, out, wlen); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
534 | free(out); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
535 | return (s*n) / s; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
536 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
537 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
538 | void aes_decrypter_shutdown(AESDecrypter *dec) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
539 | if(dec->init) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
540 | void *out = malloc(128); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
541 | size_t len = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
542 | //EVP_DecryptFinal_ex(dec->ctx, out, &len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
543 | CCCryptorFinal(dec->ctx, out, 128, &len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
544 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
545 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
546 | dec->write(out, 1, len, dec->stream); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
547 | CC_SHA256_Update(&dec->sha256, out, len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
548 | free(out); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
549 | //EVP_CIPHER_CTX_cleanup(&dec->ctx); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
550 | //EVP_CIPHER_CTX_free(dec->ctx); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
551 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
552 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
553 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
554 | void aes_decrypter_close(AESDecrypter *dec) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
555 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
556 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
557 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
558 | AESEncrypter* aes_encrypter_new(DavKey *key, void *stream, dav_read_func read_func, dav_seek_func seek_func) { |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
559 | unsigned char *iv = malloc(16); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
560 | if(dav_rand_bytes(iv, 16)) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
561 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
562 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
563 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
564 | CCCryptorRef cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
565 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
566 | if(key->type == DAV_KEY_AES128) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
567 | status = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key->data, key->length, iv, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
568 | } else if(key->type == DAV_KEY_AES256) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
569 | status = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, key->data, key->length, iv, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
570 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
571 | free(iv); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
572 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
573 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
574 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
575 | AESEncrypter *enc = malloc(sizeof(AESEncrypter)); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
576 | enc->ctx = cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
577 | CC_SHA256_Init(&enc->sha256); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
578 | enc->stream = stream; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
579 | enc->read = read_func; |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
580 | enc->seek = seek_func; |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
581 | enc->tmp = NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
582 | enc->tmplen = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
583 | enc->tmpoff = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
584 | enc->end = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
585 | enc->iv = iv; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
586 | enc->ivlen = 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
587 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
588 | return enc; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
589 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
590 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
591 | size_t aes_read(void *buf, size_t s, size_t n, AESEncrypter *enc) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
592 | size_t len = s*n; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
593 | if(enc->tmp) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
594 | size_t tmp_diff = enc->tmplen - enc->tmpoff; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
595 | size_t cp_len = tmp_diff > len ? len : tmp_diff; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
596 | memcpy(buf, enc->tmp + enc->tmpoff, cp_len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
597 | enc->tmpoff += cp_len; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
598 | if(enc->tmpoff >= enc->tmplen) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
599 | free(enc->tmp); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
600 | enc->tmp = NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
601 | enc->tmplen = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
602 | enc->tmpoff = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
603 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
604 | return cp_len / s; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
605 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
606 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
607 | if(enc->end) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
608 | return 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
609 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
610 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
611 | void *in = malloc(len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
612 | size_t in_len = enc->read(in, 1, len, enc->stream); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
613 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
614 | CC_SHA256_Update(&enc->sha256, in, in_len); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
615 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
616 | unsigned char *out = NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
617 | size_t outlen = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
618 | size_t ivl = enc->ivlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
619 | if(in_len != 0) { |
462
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
620 | outlen = len + 32; |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
621 | out = malloc(outlen + ivl); |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
622 | if(ivl > 0) { |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
623 | memcpy(out, enc->iv, ivl); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
624 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
625 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
626 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
627 | size_t avail = outlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
628 | status = CCCryptorUpdate(enc->ctx, in, in_len, out + ivl, avail, &outlen); |
462
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
629 | if(in_len != len) { |
488
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
630 | size_t newoutlen = 16; |
462
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
631 | status = CCCryptorFinal(enc->ctx, out + ivl + outlen, 16, &newoutlen); |
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
632 | outlen += newoutlen; |
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
633 | enc->end = 1; |
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
634 | } |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
635 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
636 | out = malloc(32); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
637 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
638 | size_t avail = outlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
639 | status = CCCryptorFinal(enc->ctx, out, 32, &outlen); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
640 | enc->end = 1; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
641 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
642 | enc->tmp = (char*)out; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
643 | enc->tmplen = outlen + ivl; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
644 | enc->tmpoff = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
645 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
646 | if(enc->ivlen > 0) { |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
647 | enc->ivlen = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
648 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
649 | |
462
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
650 | free(in); |
efda9aa1bbad
applies aes stream fix to macos implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
459
diff
changeset
|
651 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
652 | return aes_read(buf, s, n, enc); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
653 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
654 | |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
655 | int aes_encrypter_reset(AESEncrypter *enc, curl_off_t offset, int origin) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
656 | if(origin != SEEK_SET || offset != 0 || !enc->seek) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
657 | return CURL_SEEKFUNC_CANTSEEK; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
658 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
659 | |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
660 | enc->ivlen = 16; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
661 | if(enc->seek(enc->stream, 0, SEEK_SET) != 0) { |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
662 | return CURL_SEEKFUNC_FAIL; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
663 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
664 | return CURL_SEEKFUNC_OK; |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
665 | } |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
666 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
667 | void aes_encrypter_close(AESEncrypter *enc) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
668 | if(enc->tmp) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
669 | free(enc->tmp); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
670 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
671 | if(enc->iv) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
672 | free(enc->iv); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
673 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
674 | // TODO: cleanup cryptor |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
675 | free(enc); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
676 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
677 | |
505 | 678 | char* aes_encrypt(const char *in, size_t len, DavKey *key) { |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
679 | unsigned char iv[16]; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
680 | if(dav_rand_bytes(iv, 16)) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
681 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
682 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
683 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
684 | CCCryptorRef cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
685 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
686 | if(key->type == DAV_KEY_AES128) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
687 | status = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key->data, key->length, iv, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
688 | } else if(key->type == DAV_KEY_AES256) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
689 | status = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, key->data, key->length, iv, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
690 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
691 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
692 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
693 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
694 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
695 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
696 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
697 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
698 | int buflen = len + 64; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
699 | char *buf = calloc(1, buflen); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
700 | memcpy(buf, iv, 16); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
701 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
702 | int pos = 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
703 | size_t avail = buflen - 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
704 | size_t moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
705 | char *out = buf + 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
706 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
707 | status = CCCryptorUpdate(cryptor, in, |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
708 | len, out, avail, |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
709 | &moved); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
710 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
711 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
712 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
713 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
714 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
715 | pos += moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
716 | avail -= moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
717 | out += moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
718 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
719 | status = CCCryptorFinal(cryptor, out, avail, &moved); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
720 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
721 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
722 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
723 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
724 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
725 | pos += moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
726 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
727 | char *b64enc = util_base64encode(buf, pos); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
728 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
729 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
730 | return b64enc; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
731 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
732 | |
505 | 733 | char* aes_decrypt(const char *in, size_t *len, DavKey *key) { |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
734 | int inlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
735 | unsigned char *buf = (unsigned char*)util_base64decode_len(in, &inlen); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
736 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
737 | CCCryptorRef cryptor; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
738 | CCCryptorStatus status; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
739 | if(key->type == DAV_KEY_AES128) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
740 | status = CCCryptorCreate(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, key->data, key->length, buf, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
741 | } else if(key->type == DAV_KEY_AES256) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
742 | status = CCCryptorCreate(kCCDecrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, key->data, key->length, buf, &cryptor); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
743 | } else { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
744 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
745 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
746 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
747 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
748 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
749 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
750 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
751 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
752 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
753 | char *out = malloc(inlen + 1); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
754 | size_t outavail = inlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
755 | size_t outlen = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
756 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
757 | unsigned char *inbuf = buf + 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
758 | inlen -= 16; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
759 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
760 | size_t moved = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
761 | status = CCCryptorUpdate(cryptor, inbuf, inlen, out, outavail, &moved); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
762 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
763 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
764 | free(out); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
765 | // TODO cryptor |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
766 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
767 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
768 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
769 | outlen += moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
770 | outavail -= moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
771 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
772 | status = CCCryptorFinal(cryptor, out + outlen, outavail, &moved); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
773 | if(status != kCCSuccess) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
774 | free(buf); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
775 | free(out); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
776 | // TODO cryptor |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
777 | return NULL; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
778 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
779 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
780 | outlen += moved; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
781 | out[outlen] = 0; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
782 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
783 | *len = outlen; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
784 | return out; |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
785 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
786 | |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
787 | void dav_get_hash(DAV_SHA_CTX *sha256, unsigned char *buf) { |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
788 | CC_SHA256_Final(buf, sha256); |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
789 | } |
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
790 | |
367
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
791 | char* dav_create_hash(const char *data, size_t len) { |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
792 | unsigned char hash[DAV_SHA256_DIGEST_LENGTH]; |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
793 | CC_SHA256((const unsigned char*)data, len, hash); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
794 | return util_hexstr(hash, DAV_SHA256_DIGEST_LENGTH); |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
795 | } |
4a6a59f89f9f
adds dav-sync config for autodetecting tag changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
354
diff
changeset
|
796 | |
520
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
797 | DAV_SHA_CTX* dav_hash_init(void) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
798 | DAV_SHA_CTX *ctx = malloc(sizeof(DAV_SHA_CTX)); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
799 | CC_SHA256_Init(ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
800 | return ctx; |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
801 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
802 | |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
803 | void dav_hash_update(DAV_SHA_CTX *ctx, const char *data, size_t len) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
804 | CC_SHA256_Update(ctx, data, len); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
805 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
806 | |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
807 | void dav_hash_final(DAV_SHA_CTX *ctx, unsigned char *buf) { |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
808 | CC_SHA256_Final(buf, ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
809 | free(ctx); |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
810 | } |
da2b0cc44e4f
adds xml attribute support and xattr property
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
515
diff
changeset
|
811 | |
515
2465dd550bb5
fixes signedness of salt in dav_pw2key()
Mike Becker <universe@uap-core.de>
parents:
506
diff
changeset
|
812 | DavKey* dav_pw2key(const char *password, const unsigned char *salt, int saltlen, int pwfunc, int enc) { |
488
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
813 | if(!password) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
814 | return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
815 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
816 | size_t len = strlen(password); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
817 | if(len == 0) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
818 | return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
819 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
820 | |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
821 | // setup key data and length |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
822 | unsigned char keydata[32]; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
823 | int keylen = 32; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
824 | switch(enc) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
825 | case DAV_KEY_AES128: keylen = 16; break; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
826 | case DAV_KEY_AES256: keylen = 32; break; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
827 | default: return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
828 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
829 | |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
830 | // generate key |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
831 | switch(pwfunc) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
832 | case DAV_PWFUNC_PBKDF2_SHA256: { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
833 | int result = CCKeyDerivationPBKDF( |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
834 | kCCPBKDF2, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
835 | password, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
836 | len, |
515
2465dd550bb5
fixes signedness of salt in dav_pw2key()
Mike Becker <universe@uap-core.de>
parents:
506
diff
changeset
|
837 | salt, |
488
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
838 | saltlen, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
839 | kCCPRFHmacAlgSHA256, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
840 | DAV_CRYPTO_ITERATION_COUNT, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
841 | keydata, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
842 | keylen); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
843 | if(result) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
844 | return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
845 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
846 | break; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
847 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
848 | case DAV_PWFUNC_PBKDF2_SHA512: { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
849 | int result = CCKeyDerivationPBKDF( |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
850 | kCCPBKDF2, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
851 | password, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
852 | len, |
515
2465dd550bb5
fixes signedness of salt in dav_pw2key()
Mike Becker <universe@uap-core.de>
parents:
506
diff
changeset
|
853 | salt, |
488
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
854 | saltlen, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
855 | kCCPRFHmacAlgSHA512, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
856 | DAV_CRYPTO_ITERATION_COUNT, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
857 | keydata, |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
858 | keylen); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
859 | if(result) { |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
860 | return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
861 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
862 | break; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
863 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
864 | default: return NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
865 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
866 | |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
867 | // create DavKey with generated data |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
868 | DavKey *key = malloc(sizeof(DavKey)); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
869 | key->data = malloc(keylen); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
870 | key->length = keylen; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
871 | key->name = NULL; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
872 | key->type = enc; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
873 | memcpy(key->data, keydata, keylen); |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
874 | return key; |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
875 | } |
29b979ca8750
adds dav_pw2key commoncrypto implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
478
diff
changeset
|
876 | |
349
0b4ecadaf3f9
ports openssl code to commoncrypto (macos)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
267
diff
changeset
|
877 | #endif |
470
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
878 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
879 | UcxBuffer* aes_encrypt_buffer(UcxBuffer *in, DavKey *key) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
880 | UcxBuffer *encbuf = ucx_buffer_new( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
881 | NULL, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
882 | in->size+16, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
883 | UCX_BUFFER_AUTOEXTEND); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
884 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
885 | AESEncrypter *enc = aes_encrypter_new( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
886 | key, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
887 | in, |
478
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
888 | (dav_read_func)ucx_buffer_read, |
baa63fef5c5c
fixes redirects
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
470
diff
changeset
|
889 | NULL); |
470
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
890 | if(!enc) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
891 | ucx_buffer_free(encbuf); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
892 | return NULL; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
893 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
894 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
895 | char buf[1024]; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
896 | size_t r; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
897 | while((r = aes_read(buf, 1, 1024, enc)) > 0) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
898 | ucx_buffer_write(buf, 1, r, encbuf); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
899 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
900 | aes_encrypter_close(enc); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
901 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
902 | encbuf->pos = 0; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
903 | return encbuf; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
904 | } |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
905 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
906 | UcxBuffer* aes_decrypt_buffer(UcxBuffer *in, DavKey *key) { |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
907 | UcxBuffer *decbuf = ucx_buffer_new( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
908 | NULL, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
909 | in->size, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
910 | UCX_BUFFER_AUTOEXTEND); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
911 | AESDecrypter *dec = aes_decrypter_new( |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
912 | key, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
913 | decbuf, |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
914 | (dav_write_func)ucx_buffer_write); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
915 | |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
916 | aes_write(in->space, 1, in->size, dec); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
917 | aes_decrypter_shutdown(dec); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
918 | aes_decrypter_close(dec); |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
919 | decbuf->pos = 0; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
920 | return decbuf; |
6bf798ad3aec
adds encrypted password store
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
462
diff
changeset
|
921 | } |