aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-devtools/opkg/files/0002-sha256-Add-sha256_to_string-function.patch
blob: d5d0a4693eed8e953d45fac5603291b3657ad534 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
From a2d9b1397d09ffc493816067ca8f1e39460e8264 Mon Sep 17 00:00:00 2001
From: Paul Barker <pa...@paulbarker.me.uk>
Date: Sat, 24 Oct 2015 20:15:18 +0100
Subject: [PATCH 2/3] sha256: Add sha256_to_string function

Signed-off-by: Paul Barker <pa...@paulbarker.me.uk>
---
 libopkg/file_util.c | 28 +++-------------------------
 libopkg/sha256.c    | 17 +++++++++++++++++
 libopkg/sha256.h    |  3 +++
 3 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/libopkg/file_util.c b/libopkg/file_util.c
index cb3dbf0..864aedb 100644
--- a/libopkg/file_util.c
+++ b/libopkg/file_util.c
@@ -374,27 +374,13 @@ char *file_md5sum_alloc(const char *file_name)
 #ifdef HAVE_SHA256
 char *file_sha256sum_alloc(const char *file_name)
 {
-    static const int sha256sum_bin_len = 32;
-    static const int sha256sum_hex_len = 64;
-
-    static const unsigned char bin2hex[16] = {
-        '0', '1', '2', '3',
-        '4', '5', '6', '7',
-        '8', '9', 'a', 'b',
-        'c', 'd', 'e', 'f'
-    };
-
-    int i, err;
+    int err;
     FILE *file;
-    char *sha256sum_hex;
-    unsigned char sha256sum_bin[sha256sum_bin_len];
-
-    sha256sum_hex = xcalloc(1, sha256sum_hex_len + 1);
+    unsigned char sha256sum_bin[32];
 
     file = fopen(file_name, "r");
     if (file == NULL) {
         opkg_perror(ERROR, "Failed to open file %s", file_name);
-        free(sha256sum_hex);
         return NULL;
     }
 
@@ -402,20 +388,12 @@ char *file_sha256sum_alloc(const char *file_name)
     if (err) {
         opkg_msg(ERROR, "Could't compute sha256sum for %s.\n", file_name);
         fclose(file);
-        free(sha256sum_hex);
         return NULL;
     }
 
     fclose(file);
 
-    for (i = 0; i < sha256sum_bin_len; i++) {
-        sha256sum_hex[i * 2] = bin2hex[sha256sum_bin[i] >> 4];
-        sha256sum_hex[i * 2 + 1] = bin2hex[sha256sum_bin[i] & 0xf];
-    }
-
-    sha256sum_hex[sha256sum_hex_len] = '\0';
-
-    return sha256sum_hex;
+    return sha256_to_string(sha256sum_bin);
 }
 
 #endif
diff --git a/libopkg/sha256.c b/libopkg/sha256.c
index 0816858..5be0de3 100644
--- a/libopkg/sha256.c
+++ b/libopkg/sha256.c
@@ -29,6 +29,8 @@
 #include <stddef.h>
 #include <string.h>
 
+#include "xfuncs.h"
+
 #if USE_UNLOCKED_IO
 #include "unlocked-io.h"
 #endif
@@ -517,3 +519,18 @@ void sha256_process_block(const void *buffer, size_t len,
         h = ctx->state[7] += h;
     }
 }
+
+char *sha256_to_string(const void *sha256sum_bin)
+{
+    int i;
+    const char *src = (const char *)sha256sum_bin;
+    char *buf = xmalloc(65);
+
+    /* Print 4 bytes at a time. */
+    for (i = 0; i < 32; i += 4) {
+        sprintf(&buf[2*i], "%02hhx%02hhx%02hhx%02hhx",
+                src[i], src[i+1], src[i+2], src[i+3]);
+    }
+
+    return buf;
+}
diff --git a/libopkg/sha256.h b/libopkg/sha256.h
index 734ab54..0d1e9e5 100644
--- a/libopkg/sha256.h
+++ b/libopkg/sha256.h
@@ -85,6 +85,9 @@ extern int sha224_stream(FILE * stream, void *resblock);
 extern void *sha256_buffer(const char *buffer, size_t len, void *resblock);
 extern void *sha224_buffer(const char *buffer, size_t len, void *resblock);
 
+/* Convert a binary sha256sum value to an ASCII string. */
+char *sha256_to_string(const void *sha256sum_bin);
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.6.1