| 28 |
28 |
| 29 #include "hashing.h" |
29 #include "hashing.h" |
| 30 |
30 |
| 31 #include <stdlib.h> |
31 #include <stdlib.h> |
| 32 |
32 |
| 33 WS_SHA_CTX* ws_sha256_create(void) { |
33 WS_SHA1_CTX* ws_sha256_create(void) { |
| 34 WS_SHA_CTX *ctx = malloc(sizeof(WS_SHA_CTX)); |
34 WS_SHA1_CTX *ctx = malloc(sizeof(WS_SHA1_CTX)); |
| 35 ws_sha256_init(ctx); |
35 if(!ctx) { |
| |
36 return NULL; |
| |
37 } |
| |
38 if(ws_sha1_init(ctx)) { |
| |
39 free(ctx); |
| |
40 return NULL; |
| |
41 } |
| |
42 return ctx; |
| |
43 } |
| |
44 |
| |
45 WS_SHA256_CTX* ws_sha1_create(void) { |
| |
46 WS_SHA256_CTX *ctx = malloc(sizeof(WS_SHA256_CTX)); |
| |
47 if(!ctx) { |
| |
48 return NULL; |
| |
49 } |
| |
50 if(ws_sha256_init(ctx)) { |
| |
51 free(ctx); |
| |
52 return NULL; |
| |
53 } |
| 36 return ctx; |
54 return ctx; |
| 37 } |
55 } |
| 38 |
56 |
| 39 #if OPENSSL_VERSION_NUMBER < 0x30000000L |
57 #if OPENSSL_VERSION_NUMBER < 0x30000000L |
| 40 |
58 |
| 41 void ws_sha256_init(WS_SHA_CTX *ctx) { |
59 void ws_sha1_init(WS_SHA1_CTX *ctx) { |
| 42 SHA256_Init(ctx); |
60 SHA256_Init(ctx); |
| |
61 return 0; |
| 43 } |
62 } |
| 44 |
63 |
| 45 void ws_sha256_update(WS_SHA_CTX *ctx, const void *data, size_t length) { |
64 void ws_sha1_update(WS_SHA1_CTX *ctx, const void *data, size_t length) { |
| 46 SHA256_Update(ctx, data, length); |
65 SHA256_Update(ctx, data, length); |
| 47 } |
66 } |
| 48 |
67 |
| 49 void ws_sha256_final(char *md, WS_SHA_CTX *ctx) { |
68 void ws_sha1_final(char *md, WS_SHA1_CTX *ctx) { |
| 50 SHA256_Final(md, ctx); |
69 SHA_Final(md, ctx); |
| |
70 } |
| |
71 |
| |
72 void ws_sha256_init(WS_SHA1_CTX *ctx) { |
| |
73 SHA_Init(ctx); |
| |
74 return 0; |
| |
75 } |
| |
76 |
| |
77 void ws_sha256_update(WS_SHA1_CTX *ctx, const void *data, size_t length) { |
| |
78 SHA_Update(ctx, data, length); |
| |
79 } |
| |
80 |
| |
81 void ws_sha256_final(char *md, WS_SHA1_CTX *ctx) { |
| |
82 SHA_Final(md, ctx); |
| 51 } |
83 } |
| 52 |
84 |
| 53 #else |
85 #else |
| 54 |
86 |
| 55 void ws_sha256_init(WS_SHA_CTX *ctx) { |
87 int ws_sha1_init(WS_SHA256_CTX *ctx) { |
| 56 EVP_MD_CTX *mdctx = EVP_MD_CTX_new(); |
88 EVP_MD_CTX *mdctx = EVP_MD_CTX_new(); |
| 57 EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL); |
89 if(!mdctx) { |
| |
90 return 1; |
| |
91 } |
| |
92 EVP_DigestInit_ex(mdctx, EVP_sha1(), NULL); |
| 58 *ctx = mdctx; |
93 *ctx = mdctx; |
| |
94 return 0; |
| 59 } |
95 } |
| 60 |
96 |
| 61 void ws_sha256_update(WS_SHA_CTX *ctx, const char *data, size_t length) { |
97 void ws_sha1_update(WS_SHA256_CTX *ctx, const char *data, size_t length) { |
| 62 EVP_DigestUpdate(*ctx, data, length); |
98 EVP_DigestUpdate(*ctx, data, length); |
| 63 } |
99 } |
| 64 |
100 |
| 65 void ws_sha256_final(WS_SHA_CTX *ctx, unsigned char *md) { |
101 void ws_sha1_final(WS_SHA256_CTX *ctx, unsigned char *md) { |
| |
102 EVP_DigestFinal(*ctx, md, NULL); |
| |
103 } |
| |
104 |
| |
105 int ws_sha256_init(WS_SHA256_CTX *ctx) { |
| |
106 EVP_MD_CTX *mdctx = EVP_MD_CTX_new(); |
| |
107 if(!mdctx) { |
| |
108 return 1; |
| |
109 } |
| |
110 EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL); |
| |
111 *ctx = mdctx; |
| |
112 return 0; |
| |
113 } |
| |
114 |
| |
115 void ws_sha256_update(WS_SHA256_CTX *ctx, const char *data, size_t length) { |
| |
116 EVP_DigestUpdate(*ctx, data, length); |
| |
117 } |
| |
118 |
| |
119 void ws_sha256_final(WS_SHA256_CTX *ctx, unsigned char *md) { |
| 66 EVP_DigestFinal(*ctx, md, NULL); |
120 EVP_DigestFinal(*ctx, md, NULL); |
| 67 } |
121 } |
| 68 |
122 |
| 69 #endif |
123 #endif |