1#' Generate Key pair
2#'
3#' The \code{keygen} functions generate a random private key. Use \code{as.list(key)$pubkey}
4#' to derive the corresponding public key. Use \link{write_pem} to save a private key
5#' to a file, optionally with a password.
6#'
7#' @export
8#' @rdname keygen
9#' @name keygen
10#' @useDynLib openssl R_keygen_rsa
11#' @param bits bitsize of the generated RSA/DSA key
12#' @param curve which NIST curve to use
13#' @examples # Generate keypair
14#' key <- rsa_keygen()
15#' pubkey <- as.list(key)$pubkey
16#'
17#' # Write/read the key with a passphrase
18#' write_pem(key, "id_rsa", password = "supersecret")
19#' read_key("id_rsa", password = "supersecret")
20#' unlink("id_rsa")
21rsa_keygen <- function(bits = 2048){
22  key <- .Call(R_keygen_rsa, as.integer(bits))
23  structure(key, class = c("key", "rsa"))
24}
25
26#' @export
27#' @rdname keygen
28#' @useDynLib openssl R_keygen_dsa
29dsa_keygen <- function(bits = 1024){
30  key <- .Call(R_keygen_dsa, as.integer(bits))
31  structure(key, class = c("key", "dsa"))
32}
33
34#' @export
35#' @rdname keygen
36#' @useDynLib openssl R_keygen_ecdsa
37ec_keygen <- function(curve = c("P-256", "P-384", "P-521")){
38  key <- .Call(R_keygen_ecdsa, match.arg(curve))
39  structure(key, class = c("key", "ecdsa"))
40}
41
42#' @export
43#' @rdname keygen
44#' @useDynLib openssl R_keygen_x25519
45x25519_keygen <- function(){
46  key <- .Call(R_keygen_x25519)
47  structure(key, class = c("key", "x25519"))
48}
49
50#' @export
51#' @rdname keygen
52#' @useDynLib openssl R_keygen_ed25519
53ed25519_keygen <- function(){
54  key <- .Call(R_keygen_ed25519)
55  structure(key, class = c("key", "ed25519"))
56}
57