Skip to content

Commit deca66a

Browse files
committed
optimise SHA functions and as.character method
1 parent e5e8470 commit deca66a

File tree

4 files changed

+257
-70
lines changed

4 files changed

+257
-70
lines changed

R/sha.R

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,7 @@
4545
#'
4646
#' @export
4747
#'
48-
sha224 <- function(x, key = NULL) {
49-
50-
if (!is.raw(x))
51-
x <- if (is.character(x)) charToRaw(x) else serialize(x, NULL)
52-
if (!is.null(key) && !is.raw(key))
53-
key <- if (is.character(key)) charToRaw(key) else serialize(key, NULL)
54-
.Call(rnng_sha224, x, key)
55-
56-
}
48+
sha224 <- function(x, key = NULL) .Call(rnng_sha224, x, key)
5749

5850
#' Cryptographic Hashing Using the SHA-256 Algorithm
5951
#'
@@ -84,15 +76,7 @@ sha224 <- function(x, key = NULL) {
8476
#'
8577
#' @export
8678
#'
87-
sha256 <- function(x, key = NULL) {
88-
89-
if (!is.raw(x))
90-
x <- if (is.character(x)) charToRaw(x) else serialize(x, NULL)
91-
if (!is.null(key) && !is.raw(key))
92-
key <- if (is.character(key)) charToRaw(key) else serialize(key, NULL)
93-
.Call(rnng_sha256, x, key)
94-
95-
}
79+
sha256 <- function(x, key = NULL) .Call(rnng_sha256, x, key)
9680

9781
#' Cryptographic Hashing Using the SHA-384 Algorithm
9882
#'
@@ -123,15 +107,7 @@ sha256 <- function(x, key = NULL) {
123107
#'
124108
#' @export
125109
#'
126-
sha384 <- function(x, key = NULL) {
127-
128-
if (!is.raw(x))
129-
x <- if (is.character(x)) charToRaw(x) else serialize(x, NULL)
130-
if (!is.null(key) && !is.raw(key))
131-
key <- if (is.character(key)) charToRaw(key) else serialize(key, NULL)
132-
.Call(rnng_sha384, x, key)
133-
134-
}
110+
sha384 <- function(x, key = NULL) .Call(rnng_sha384, x, key)
135111

136112
#' Cryptographic Hashing Using the SHA-512 Algorithm
137113
#'
@@ -162,19 +138,11 @@ sha384 <- function(x, key = NULL) {
162138
#'
163139
#' @export
164140
#'
165-
sha512 <- function(x, key = NULL) {
166-
167-
if (!is.raw(x))
168-
x <- if (is.character(x)) charToRaw(x) else serialize(x, NULL)
169-
if (!is.null(key) && !is.raw(key))
170-
key <- if (is.character(key)) charToRaw(key) else serialize(key, NULL)
171-
.Call(rnng_sha512, x, key)
172-
173-
}
141+
sha512 <- function(x, key = NULL) .Call(rnng_sha512, x, key)
174142

175143
#' @export
176144
#'
177-
as.character.nanoHash <- function(x, ...) paste(unclass(x), collapse = "")
145+
as.character.nanoHash <- function(x, ...) .Call(rnng_hashToChar, x)
178146

179147
#' @export
180148
#'

src/init.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020

2121
SEXP nano_AioSymbol;
2222
SEXP nano_ContextSymbol;
23+
SEXP nano_CtrSymbol;
2324
SEXP nano_DataSymbol;
2425
SEXP nano_DialerSymbol;
2526
SEXP nano_IdSymbol;
2627
SEXP nano_ListenerSymbol;
2728
SEXP nano_ProtocolSymbol;
2829
SEXP nano_ResultSymbol;
2930
SEXP nano_RtcSymbol;
31+
SEXP nano_SerialSymbol;
3032
SEXP nano_SocketSymbol;
3133
SEXP nano_StateSymbol;
3234
SEXP nano_StreamSymbol;
@@ -37,13 +39,15 @@ SEXP nano_UrlSymbol;
3739
static void RegisterSymbols(void) {
3840
nano_AioSymbol = Rf_install("aio");
3941
nano_ContextSymbol = Rf_install("context");
42+
nano_CtrSymbol = Rf_install("charToRaw");
4043
nano_DataSymbol = Rf_install("data");
4144
nano_DialerSymbol = Rf_install("dialer");
4245
nano_IdSymbol = Rf_install("id");
4346
nano_ListenerSymbol = Rf_install("listener");
4447
nano_ProtocolSymbol = Rf_install("protocol");
4548
nano_ResultSymbol = Rf_install("result");
4649
nano_RtcSymbol = Rf_install("rawToChar");
50+
nano_SerialSymbol = Rf_install("serialize");
4751
nano_SocketSymbol = Rf_install("socket");
4852
nano_StateSymbol = Rf_install("state");
4953
nano_StreamSymbol = Rf_install("stream");
@@ -75,6 +79,7 @@ static const R_CallMethodDef CallEntries[] = {
7579
{"rnng_dialer_create", (DL_FUNC) &rnng_dialer_create, 2},
7680
{"rnng_dialer_set", (DL_FUNC) &rnng_dialer_set, 4},
7781
{"rnng_dialer_start", (DL_FUNC) &rnng_dialer_start, 2},
82+
{"rnng_hashToChar", (DL_FUNC) &rnng_hashToChar, 1},
7883
{"rnng_listen", (DL_FUNC) &rnng_listen, 2},
7984
{"rnng_listener_close", (DL_FUNC) &rnng_listener_close, 1},
8085
{"rnng_listener_create", (DL_FUNC) &rnng_listener_create, 2},

src/nanonext.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,15 @@ extern void listener_finalizer(SEXP);
7171

7272
extern SEXP nano_AioSymbol;
7373
extern SEXP nano_ContextSymbol;
74+
extern SEXP nano_CtrSymbol;
7475
extern SEXP nano_DataSymbol;
7576
extern SEXP nano_DialerSymbol;
7677
extern SEXP nano_IdSymbol;
7778
extern SEXP nano_ListenerSymbol;
7879
extern SEXP nano_ProtocolSymbol;
7980
extern SEXP nano_ResultSymbol;
8081
extern SEXP nano_RtcSymbol;
82+
extern SEXP nano_SerialSymbol;
8183
extern SEXP nano_SocketSymbol;
8284
extern SEXP nano_StateSymbol;
8385
extern SEXP nano_StreamSymbol;
@@ -107,6 +109,7 @@ extern SEXP rnng_dialer_close(SEXP);
107109
extern SEXP rnng_dialer_create(SEXP, SEXP);
108110
extern SEXP rnng_dialer_set(SEXP, SEXP, SEXP, SEXP);
109111
extern SEXP rnng_dialer_start(SEXP, SEXP);
112+
extern SEXP rnng_hashToChar(SEXP);
110113
extern SEXP rnng_listen(SEXP, SEXP);
111114
extern SEXP rnng_listener_close(SEXP);
112115
extern SEXP rnng_listener_create(SEXP, SEXP);

0 commit comments

Comments
 (0)