mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-13 13:55:45 +00:00
Move output parameters to end and add defines for buffer sizes
This commit is contained in:
parent
278e230761
commit
d781a25f30
@ -50,6 +50,12 @@ typedef struct {
|
|||||||
|
|
||||||
typedef void (*received_msg_handler)(received_message* msg, void* udata);
|
typedef void (*received_msg_handler)(received_message* msg, void* udata);
|
||||||
|
|
||||||
|
/** Buffer lengths, can be used in go for convenience */
|
||||||
|
#define ID_LEN 32
|
||||||
|
#define SYMKEY_LEN 32
|
||||||
|
#define PRIVKEY_LEN 32
|
||||||
|
#define BLOOM_LEN 64
|
||||||
|
|
||||||
/** Initialize Nim and the Status library. Must be called before anything else
|
/** Initialize Nim and the Status library. Must be called before anything else
|
||||||
* of the API. Also, all following calls must come from the same thread as from
|
* of the API. Also, all following calls must come from the same thread as from
|
||||||
* which this call was done.
|
* which this call was done.
|
||||||
@ -77,19 +83,20 @@ void nimbus_poll();
|
|||||||
|
|
||||||
/** Raw 32 byte arrays are passed as IDs. The caller needs to provide a pointer
|
/** Raw 32 byte arrays are passed as IDs. The caller needs to provide a pointer
|
||||||
* to 32 bytes allocation for this. */
|
* to 32 bytes allocation for this. */
|
||||||
bool nimbus_new_keypair(uint8_t id[32]);
|
bool nimbus_new_keypair(uint8_t id[ID_LEN]);
|
||||||
bool nimbus_add_keypair(uint8_t id[32], const uint8_t privkey[32]);
|
bool nimbus_add_keypair(const uint8_t privkey[PRIVKEY_LEN], uint8_t id[ID_LEN]);
|
||||||
bool nimbus_delete_keypair(const uint8_t id[32]);
|
bool nimbus_delete_keypair(const uint8_t id[ID_LEN]);
|
||||||
bool nimbus_get_private_key(const uint8_t id[32], uint8_t privkey[32]);
|
bool nimbus_get_private_key(const uint8_t id[ID_LEN],
|
||||||
|
uint8_t privkey[PRIVKEY_LEN]);
|
||||||
|
|
||||||
/** Symmetric Keys API */
|
/** Symmetric Keys API */
|
||||||
|
|
||||||
/** Raw 32 byte arrays are passed as IDs. The caller needs to provide a pointer
|
/** Raw 32 byte arrays are passed as IDs. The caller needs to provide a pointer
|
||||||
* to 32 bytes allocation for this. */
|
* to 32 bytes allocation for this. */
|
||||||
bool nimbus_add_symkey(uint8_t id[32], const uint8_t symkey[32]);
|
bool nimbus_add_symkey(const uint8_t symkey[SYMKEY_LEN], uint8_t id[ID_LEN]);
|
||||||
bool nimbus_add_symkey_from_password(uint8_t id[32], const char* password);
|
bool nimbus_add_symkey_from_password(const char* password, uint8_t id[ID_LEN]);
|
||||||
bool nimbus_delete_symkey(const uint8_t id[32]);
|
bool nimbus_delete_symkey(const uint8_t id[ID_LEN]);
|
||||||
bool nimbus_get_symkey(const uint8_t id[32], uint8_t symkey[32]);
|
bool nimbus_get_symkey(const uint8_t id[ID_LEN], uint8_t symkey[SYMKEY_LEN]);
|
||||||
|
|
||||||
/** Whisper message posting and receiving API */
|
/** Whisper message posting and receiving API */
|
||||||
|
|
||||||
@ -98,9 +105,9 @@ bool nimbus_post(post_message* msg);
|
|||||||
/** Subscribe to given filter. The void pointer udata will be passed to the
|
/** Subscribe to given filter. The void pointer udata will be passed to the
|
||||||
* received_msg_handler callback.
|
* received_msg_handler callback.
|
||||||
*/
|
*/
|
||||||
bool nimbus_subscribe_filter(uint8_t id[32], filter_options* filter_options,
|
bool nimbus_subscribe_filter(filter_options* filter_options,
|
||||||
received_msg_handler msg, void* udata);
|
received_msg_handler msg, void* udata, uint8_t id[ID_LEN]);
|
||||||
bool nimbus_unsubscribe_filter(const uint8_t id[32]);
|
bool nimbus_unsubscribe_filter(const uint8_t id[ID_LEN]);
|
||||||
|
|
||||||
/** Get the minimum required PoW of this node */
|
/** Get the minimum required PoW of this node */
|
||||||
double nimbus_get_min_pow();
|
double nimbus_get_min_pow();
|
||||||
@ -108,7 +115,7 @@ double nimbus_get_min_pow();
|
|||||||
/** Get the currently set bloom filter of this node. This will automatically
|
/** Get the currently set bloom filter of this node. This will automatically
|
||||||
*update for each filter subsribed to.
|
*update for each filter subsribed to.
|
||||||
*/
|
*/
|
||||||
void nimbus_get_bloom_filter(uint8_t bloomfilter[64]);
|
void nimbus_get_bloom_filter(uint8_t bloomfilter[BLOOM_LEN]);
|
||||||
|
|
||||||
/** Example helper, can be removed */
|
/** Example helper, can be removed */
|
||||||
topic nimbus_channel_to_topic(const char* channel);
|
topic nimbus_channel_to_topic(const char* channel);
|
||||||
|
@ -176,7 +176,7 @@ proc nimbus_new_keypair(id: var Identifier): bool {.exportc, raises: [].} =
|
|||||||
# in `newKeyPair`
|
# in `newKeyPair`
|
||||||
discard
|
discard
|
||||||
|
|
||||||
proc nimbus_add_keypair(id: var Identifier, privateKey: ptr byte):
|
proc nimbus_add_keypair(privateKey: ptr byte, id: var Identifier):
|
||||||
bool {.exportc, raises: [OSError, IOError, ValueError].} =
|
bool {.exportc, raises: [OSError, IOError, ValueError].} =
|
||||||
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
||||||
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
||||||
@ -213,7 +213,7 @@ proc nimbus_get_private_key(id: Identifier, privateKey: var PrivateKey):
|
|||||||
|
|
||||||
# Symmetric Keys
|
# Symmetric Keys
|
||||||
|
|
||||||
proc nimbus_add_symkey(id: var Identifier, symKey: ptr SymKey): bool
|
proc nimbus_add_symkey(symKey: ptr SymKey, id: var Identifier): bool
|
||||||
{.exportc, raises: [].} =
|
{.exportc, raises: [].} =
|
||||||
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
||||||
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
||||||
@ -225,7 +225,7 @@ proc nimbus_add_symkey(id: var Identifier, symKey: ptr SymKey): bool
|
|||||||
# Copy of key happens at add
|
# Copy of key happens at add
|
||||||
whisperKeys.symKeys.add(id.toHex, symKey[])
|
whisperKeys.symKeys.add(id.toHex, symKey[])
|
||||||
|
|
||||||
proc nimbus_add_symkey_from_password(id: var Identifier, password: cstring):
|
proc nimbus_add_symkey_from_password(password: cstring, id: var Identifier):
|
||||||
bool {.exportc, raises: [].} =
|
bool {.exportc, raises: [].} =
|
||||||
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
## Caller needs to provide as id a pointer to 32 bytes allocation.
|
||||||
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
doAssert(not (unsafeAddr id).isNil, "Key id cannot be nil.")
|
||||||
@ -321,9 +321,9 @@ proc nimbus_post(message: ptr CPostMessage): bool {.exportc.} =
|
|||||||
powTime = message.powTime,
|
powTime = message.powTime,
|
||||||
powTarget = message.powTarget)
|
powTarget = message.powTarget)
|
||||||
|
|
||||||
proc nimbus_subscribe_filter(id: var Identifier, options: ptr CFilterOptions,
|
proc nimbus_subscribe_filter(options: ptr CFilterOptions,
|
||||||
handler: proc (msg: ptr CReceivedMessage, udata: pointer) {.gcsafe, cdecl.},
|
handler: proc (msg: ptr CReceivedMessage, udata: pointer) {.gcsafe, cdecl.},
|
||||||
udata: pointer = nil): bool {.exportc.} =
|
udata: pointer = nil, id: var Identifier): bool {.exportc.} =
|
||||||
## Encryption is mandatory.
|
## Encryption is mandatory.
|
||||||
## A symmetric key or an asymmetric key must be provided. Both is not allowed.
|
## A symmetric key or an asymmetric key must be provided. Both is not allowed.
|
||||||
## In case of a passed handler, the received msg needs to be copied before the
|
## In case of a passed handler, the received msg needs to be copied before the
|
||||||
|
@ -60,25 +60,24 @@ func StatusListenAndPost(channel string) {
|
|||||||
channelC := C.CString(channel)
|
channelC := C.CString(channel)
|
||||||
defer C.free(unsafe.Pointer(channelC))
|
defer C.free(unsafe.Pointer(channelC))
|
||||||
|
|
||||||
tmp := C.malloc(C.size_t(32))
|
tmp := C.malloc(C.size_t(C.ID_LEN))
|
||||||
if C.nimbus_add_symkey_from_password((*C.uint8_t)(tmp), channelC) == false {
|
if C.nimbus_add_symkey_from_password(channelC, (*C.uint8_t)(tmp)) == false {
|
||||||
panic("Cannot create symmetric key")
|
panic("Cannot create symmetric key")
|
||||||
}
|
}
|
||||||
// No need to do this back and forth GO <-> C, just showing how it might work
|
// No need to do this back and forth GO <-> C, just showing how it might work
|
||||||
// in implementations (when wrapped in calls passing Go Bytes or Strings).
|
// in implementations (when wrapped in calls passing Go Bytes or Strings).
|
||||||
symKeyId := C.GoBytes(tmp, 32)
|
symKeyId := C.GoBytes(tmp, C.ID_LEN)
|
||||||
C.free(unsafe.Pointer(tmp))
|
C.free(unsafe.Pointer(tmp))
|
||||||
symKeyIdC := (*C.uint8_t)(C.CBytes(symKeyId))
|
symKeyIdC := (*C.uint8_t)(C.CBytes(symKeyId))
|
||||||
defer C.free(unsafe.Pointer(symKeyIdC))
|
defer C.free(unsafe.Pointer(symKeyIdC))
|
||||||
|
|
||||||
|
tmp = C.malloc(C.size_t(C.ID_LEN))
|
||||||
tmp = C.malloc(C.size_t(32))
|
|
||||||
if C.nimbus_new_keypair((*C.uint8_t)(tmp)) == false {
|
if C.nimbus_new_keypair((*C.uint8_t)(tmp)) == false {
|
||||||
panic("Cannot create asymmetric keypair")
|
panic("Cannot create asymmetric keypair")
|
||||||
}
|
}
|
||||||
// No need to do this back and forth GO <-> C, just showing how it might work
|
// No need to do this back and forth GO <-> C, just showing how it might work
|
||||||
// in implementations (when wrapped in calls passing Go Bytes or Strings).
|
// in implementations (when wrapped in calls passing Go Bytes or Strings).
|
||||||
asymKeyId := C.GoBytes(tmp, 32)
|
asymKeyId := C.GoBytes(tmp, C.ID_LEN)
|
||||||
C.free(unsafe.Pointer(tmp))
|
C.free(unsafe.Pointer(tmp))
|
||||||
asymKeyIdC := (*C.uint8_t)(C.CBytes(asymKeyId))
|
asymKeyIdC := (*C.uint8_t)(C.CBytes(asymKeyId))
|
||||||
defer C.free(unsafe.Pointer(asymKeyIdC))
|
defer C.free(unsafe.Pointer(asymKeyIdC))
|
||||||
@ -89,13 +88,13 @@ func StatusListenAndPost(channel string) {
|
|||||||
minPow: 0.002,
|
minPow: 0.002,
|
||||||
topic: C.nimbus_channel_to_topic(channelC).topic}
|
topic: C.nimbus_channel_to_topic(channelC).topic}
|
||||||
|
|
||||||
tmp = C.malloc(C.size_t(32))
|
tmp = C.malloc(C.size_t(C.ID_LEN))
|
||||||
if C.nimbus_subscribe_filter((*C.uint8_t)(tmp), &options,
|
if C.nimbus_subscribe_filter(&options,
|
||||||
(C.received_msg_handler)(unsafe.Pointer(C.receiveHandler_cgo)),
|
(C.received_msg_handler)(unsafe.Pointer(C.receiveHandler_cgo)),
|
||||||
unsafe.Pointer(&msgCount)) == false {
|
unsafe.Pointer(&msgCount), (*C.uint8_t)(tmp)) == false {
|
||||||
panic("Cannot subscribe filter")
|
panic("Cannot subscribe filter")
|
||||||
}
|
}
|
||||||
filterId := C.GoBytes(tmp, 32)
|
filterId := C.GoBytes(tmp, C.ID_LEN)
|
||||||
C.free(unsafe.Pointer(tmp))
|
C.free(unsafe.Pointer(tmp))
|
||||||
fmt.Printf("[nim-status] filter subscribed, id: %s\n",
|
fmt.Printf("[nim-status] filter subscribed, id: %s\n",
|
||||||
hex.EncodeToString(filterId))
|
hex.EncodeToString(filterId))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user