File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Copyright 2015 The go-ethereum Authors
2
+ // This file is part of the go-ethereum library.
3
+ //
4
+ // The go-ethereum library is free software: you can redistribute it and/or modify
5
+ // it under the terms of the GNU Lesser General Public License as published by
6
+ // the Free Software Foundation, either version 3 of the License, or
7
+ // (at your option) any later version.
8
+ //
9
+ // The go-ethereum library is distributed in the hope that it will be useful,
10
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ // GNU Lesser General Public License for more details.
13
+ //
14
+ // You should have received a copy of the GNU Lesser General Public License
15
+ // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ package secp256k1
18
+
19
+ import "C"
20
+ import "unsafe"
21
+
22
+ // Callbacks for converting libsecp256k1 internal faults into
23
+ // recoverable Go panics.
24
+
25
+ //export secp256k1GoPanicIllegal
26
+ func secp256k1GoPanicIllegal (msg * C.char , data unsafe.Pointer ) {
27
+ panic ("illegal argument: " + C .GoString (msg ))
28
+ }
29
+
30
+ //export secp256k1GoPanicError
31
+ func secp256k1GoPanicError (msg * C.char , data unsafe.Pointer ) {
32
+ panic ("internal error: " + C .GoString (msg ))
33
+ }
Original file line number Diff line number Diff line change @@ -35,6 +35,10 @@ package secp256k1
35
35
#define NDEBUG
36
36
#include "./libsecp256k1/src/secp256k1.c"
37
37
#include "./libsecp256k1/src/modules/recovery/main_impl.h"
38
+
39
+ typedef void (*callbackFunc) (const char* msg, void* data);
40
+ extern void secp256k1GoPanicIllegal(const char* msg, void* data);
41
+ extern void secp256k1GoPanicError(const char* msg, void* data);
38
42
*/
39
43
import "C"
40
44
@@ -61,6 +65,8 @@ var context *C.secp256k1_context
61
65
func init () {
62
66
// around 20 ms on a modern CPU.
63
67
context = C .secp256k1_context_create (3 ) // SECP256K1_START_SIGN | SECP256K1_START_VERIFY
68
+ C .secp256k1_context_set_illegal_callback (context , C .callbackFunc (C .secp256k1GoPanicIllegal ), nil )
69
+ C .secp256k1_context_set_error_callback (context , C .callbackFunc (C .secp256k1GoPanicError ), nil )
64
70
}
65
71
66
72
var (
You can’t perform that action at this time.
0 commit comments