Skip to content

Commit 84d2df1

Browse files
committed
Add SHA256 selftest
1 parent 5e5fb28 commit 84d2df1

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

Makefile.am

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ noinst_HEADERS += src/field_5x52_asm_impl.h
3737
noinst_HEADERS += src/util.h
3838
noinst_HEADERS += src/scratch.h
3939
noinst_HEADERS += src/scratch_impl.h
40+
noinst_HEADERS += src/selftest.h
4041
noinst_HEADERS += src/testrand.h
4142
noinst_HEADERS += src/testrand_impl.h
4243
noinst_HEADERS += src/hash.h

src/secp256k1.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "eckey_impl.h"
2020
#include "hash_impl.h"
2121
#include "scratch_impl.h"
22+
#include "selftest.h"
2223

2324
#if defined(VALGRIND)
2425
# include <valgrind/memcheck.h>
@@ -117,6 +118,7 @@ secp256k1_context* secp256k1_context_preallocated_create(void* prealloc, unsigne
117118
size_t prealloc_size;
118119
secp256k1_context* ret;
119120

121+
CHECK(secp256k1_selftest());
120122
VERIFY_CHECK(prealloc != NULL);
121123
prealloc_size = secp256k1_context_preallocated_size(flags);
122124
ret = (secp256k1_context*)manual_alloc(&prealloc, sizeof(secp256k1_context), base, prealloc_size);
@@ -144,8 +146,12 @@ secp256k1_context* secp256k1_context_preallocated_create(void* prealloc, unsigne
144146
}
145147

146148
secp256k1_context* secp256k1_context_create(unsigned int flags) {
147-
size_t const prealloc_size = secp256k1_context_preallocated_size(flags);
148-
secp256k1_context* ctx = (secp256k1_context*)checked_malloc(&default_error_callback, prealloc_size);
149+
size_t prealloc_size;
150+
secp256k1_context* ctx;
151+
152+
CHECK(secp256k1_selftest());
153+
prealloc_size = secp256k1_context_preallocated_size(flags);
154+
ctx = (secp256k1_context*)checked_malloc(&default_error_callback, prealloc_size);
149155
if (EXPECT(secp256k1_context_preallocated_create(ctx, flags) == NULL, 0)) {
150156
free(ctx);
151157
return NULL;

src/selftest.h

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**********************************************************************
2+
* Copyright (c) 2020 Pieter Wuille *
3+
* Distributed under the MIT software license, see the accompanying *
4+
* file COPYING or http://www.opensource.org/licenses/mit-license.php.*
5+
**********************************************************************/
6+
7+
#ifndef SECP256K1_SELFTEST_H
8+
#define SECP256K1_SELFTEST_H
9+
10+
#include "hash.h"
11+
12+
#include <string.h>
13+
14+
static int secp256k1_selftest_sha256(void) {
15+
static const char *input63 = "For this sample, this 63-byte string will be used as input data";
16+
static const unsigned char output32[32] = {
17+
0xf0, 0x8a, 0x78, 0xcb, 0xba, 0xee, 0x08, 0x2b, 0x05, 0x2a, 0xe0, 0x70, 0x8f, 0x32, 0xfa, 0x1e,
18+
0x50, 0xc5, 0xc4, 0x21, 0xaa, 0x77, 0x2b, 0xa5, 0xdb, 0xb4, 0x06, 0xa2, 0xea, 0x6b, 0xe3, 0x42,
19+
};
20+
unsigned char out[32];
21+
secp256k1_sha256 hasher;
22+
secp256k1_sha256_initialize(&hasher);
23+
secp256k1_sha256_write(&hasher, (const unsigned char*)input63, 63);
24+
secp256k1_sha256_finalize(&hasher, out);
25+
return memcmp(out, output32, 32) == 0;
26+
}
27+
28+
static int secp256k1_selftest(void) {
29+
return secp256k1_selftest_sha256();
30+
}
31+
32+
#endif /* SECP256K1_SELFTEST_H */

0 commit comments

Comments
 (0)