• Stars
    star
    105
  • Rank 328,196 (Top 7 %)
  • Language
    R
  • Created about 10 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Secure private R data in public packages

secure

Build Status

The secure package provides a secure vault within a publicly available code repository. It allows you to store private information in a public repository so that only select people can read it. This is particularly useful for testing because you can now store private credentials in your public repo, without them being readable by the world.

Secure is built on top of asymmetric (public/private key) encryption. Secure generates a random master key and uses that to encrypt (with AES256) each file in vault/. The master key is not stored unencrypted anywhere; instead, an encrypted copy is stored for each user, using their own public key. Each user can than decrypt the encrypted master key using their private key, then use that to decrypt each file.

Installation

Secure is currently only available on github. Install it with:

# install.packages("devtools")
devtools::install_github("s-u/PKI") # needed for bug fixes not currently on CRAN
devtools::install_github("hadley/secure")

First steps

To get started:

  • Create a vault directory.

  • Add yourself as as user with secure::add_user("your name", local_key()). This will add your name and public key to vault/users.json. (You can add other people from their github_key()s).

  • Securely store data: secure::encrypt("google", key = "abcdasdf", secret = "asdfsad"). This creates secure/google.rds.enc, an encrypted rds file.

  • Retrieve encrypted data: secure::decrypt("google"). This decrypts the encrypted file using your private key.

In a package

  • Create inst/vault and add secure to the Suggests field in the DESCRIPTION (or run secure::use_secure()).

  • If you use travis, add the public key for your travis repo: secure::add_user("travis", travis_key("user/repo")).

  • When developing locally, you can use all functions as is. They look for a vault in the working directory.

  • In tests, supply the package name to the vault argument. For example, one of the tests for the secure package looks like this:

    test_that("can decrypt secrets", {
      # Skips the test if doesn't have the key to open the secure vault
      skip_when_missing_key("secure")
      
      # Decrypt a file stored in secure/inst/vault
      test <- decrypt("test", vault = "secure")
      expect_equal(test$a, 1)
      expect_equal(test$b, 2)
    })

Caveats

  • I'm not a security expert. As far as I know I've designed this package according to security best practices, but I'm not sure.

  • You still need to be careful not to accidentally expose secrets through log files, .Rhistory, etc.

More Repositories

1

r4ds

R for data science: a book
R
4,500
star
2

adv-r

Advanced R: a book
TeX
2,248
star
3

stats337

Readings in applied data science
R
1,626
star
4

ggplot2-book

ggplot2: elegant graphics for data analysis
Perl
1,543
star
5

mastering-shiny

Mastering Shiny: a book
R
1,335
star
6

r-pkgs

Building R packages
R
765
star
7

plyr

A R package for splitting, applying and combining large problems into simpler problems
R
493
star
8

tidy-data

A paper on data tidying
TeX
404
star
9

emo

Easily insert emoji into R and RMarkdown
R
396
star
10

r-internals

Documentation for R's internal C API
341
star
11

bigvis

Exploratory data analysis for large datasets (10-100 million observations)
C++
286
star
12

strict

Make R a little bit stricter
R
219
star
13

data-baby-names

Distribution of US baby names, 1880-2008
R
207
star
14

reshape

An R package to flexible rearrange, reshape and aggregate data
R
206
star
15

data-movies

Download data from IMDB movies and parse into useful form
Ruby
203
star
16

pryr

Pry open the covers of R
R
201
star
17

assertthat

User friendly assertions for R
R
200
star
18

r2d3

ggplot2 + d3 = r2d3
JavaScript
183
star
19

babynames

An R package containing US baby names from the SSA
R
131
star
20

lazyeval

Lazy evaluation: an alternative to non-standard evaluation (NSE) for R
R
131
star
21

purrrlyr

Tools at the intersection of purrr and dplyr
C++
103
star
22

lineprof

Visualise line profiling results in R
JavaScript
102
star
23

requirements

Find packages required for code to run
R
75
star
24

elmer

Call LLM APIs from R
R
71
star
25

ggstat

Statistical computations for visualisation
C++
70
star
26

r-python

Exploring data related to relative usage of R vs. python
R
68
star
27

gg2v

Render ggplot2 graphics using vega
JavaScript
67
star
28

building-permits

Code & data accompanying "whole-game" youtube video
66
star
29

stringb

A dependency-free version of stringr
R
65
star
30

precis

Succintly Summarise Data Frames
R
63
star
31

r-on-github

An exploration of R code and package on github, using the github search and repo apis
R
54
star
32

data-housing-crisis

Clean data related to the housing crisis
R
53
star
33

tidy-tools

Building tidy tools in R, a workshop
R
49
star
34

decumar

An alternative to sweave
R
49
star
35

neiss

Data from National Electronic Injury Surveillance System
HTML
48
star
36

monads

Work with Monads in R
R
47
star
37

joy-of-fp

Supplemental materials for "The joy of functional programming"
R
45
star
38

crantastic

Source code for crantastic.org: a community site for R
Ruby
44
star
39

recipes

Wickham family recipes
R
43
star
40

oldbookdown

R
39
star
41

cubelyr

A data cube dplyr backend
R
36
star
42

data-fuel-economy

Fuel economy data, 1978-2008
35
star
43

table-shapes

34
star
44

lvplot

Letter value boxplots for R
R
34
star
45

usdanutrients

USDA nutrient database as an R data package
R
34
star
46

reactive-docs

An introduction to reactive documents in R (for teaching stats)
34
star
47

vis-eda

Visualisation for EDA
R
32
star
48

rsmith

A static site generator for R inspired by metalsmith.io
R
32
star
49

sfhousing

Code to download and process SF housing sales data
R
32
star
50

helpr

An alternative html help system for R
R
31
star
51

profr

An alternative profiling package for R
R
30
star
52

cocktails

Hadley's cocktail book
R
29
star
53

productplots

Product graphics for categorical data
R
29
star
54

shinySignals

R
29
star
55

data-counties

County boundaries in csv for all US counties
R
28
star
56

l1tf

L1 trend filtering
C
27
star
57

ggplot1

Before there was ggplot2
R
26
star
58

roxygen3

R
23
star
59

15-state-of-the-union

R
22
star
60

minby

Compute minimum of one variable grouped by another
R
21
star
61

mylittlepony

A package for learning about the basics of package development
R
19
star
62

tidyverse-booster

R
19
star
63

hadley.github.com

Personal blog
JavaScript
18
star
64

boxplots-paper

TeX
18
star
65

mturkr

Tools to make MTurk tasks easy to run from R
R
18
star
66

monthApp

An example of a Shiny app-package
R
18
star
67

docker

My personal dockerfiles
17
star
68

fueleconomy

EPA fuel economy data in an R package
R
16
star
69

meifly

An R package for exploring ensembles of (generalised) linear models
R
16
star
70

clusterfly

An R package for visualising high-dimensional clustering algorithms
R
16
star
71

rminds

Sample R code for visualising models (especially models in data space)
16
star
72

sinartra

R
15
star
73

beautiful-data

Book chapter for beautiful data
15
star
74

eggnogr

Shiny app for scaling eggnog
R
14
star
75

15-student-papers

Graphics & computing student paper winners @ JSM 2015
R
14
star
76

fec-dplyr

Exploration of FEC contributions data with dplyr
R
13
star
77

mexico-mortality

Mortality data for Mexico, along with useful extra data
R
13
star
78

grouperise

Explore the idea of "grouperised" functions
C
13
star
79

mutatr

Prototype-based mutable objects for R, based on io and javascript
R
12
star
80

lvplot-paper

TeX
12
star
81

yrbss

Youth Risk Behaviour Surveillance System Data
R
12
star
82

tanglekit

R bindings for Brett Victor's tangle.js
JavaScript
11
star
83

nasaweather

Data from the 2006 ASA data expo
R
11
star
84

ggplot2-bayarea

Data, code and slides for ggplot2 talk given to Bay Area useR group, 17 Sep 2009
R
11
star
85

htmlbook

Convert a Quarto book to O'Reilly's html book format
HTML
11
star
86

vita

HTML
10
star
87

classifly

An R package to visualise high-dimensional classification boundaries with GGobi
R
10
star
88

ideas

Research ideas
10
star
89

proto

Prototype Object-Based Programming
R
10
star
90

cran-logs-dplyr

An case study using dplyr on a large dataset: all package downloads from the Rstudio cran mirror.
R
9
star
91

scagnostics

An R package to calculate graph theoretic scagnostics
C++
9
star
92

ggplot2movies

What the package does (one paragraph).
R
9
star
93

tidycore

Core tidyverse packages
R
9
star
94

densityvis

R package for cutting and binning data
R
9
star
95

fortify

Convert any R object to a data frame, suitable for visualisation
R
9
star
96

hadladdin

RStudio add-ins by Hadley
R
9
star
97

hadcol

Hadley's utilities for adding columns
R
9
star
98

talk-httr2

R
9
star
99

localmds

Local multidimensional scaling, an R package
8
star
100

layers

Layers code extracted out of ggplot2
R
8
star