context("RSA signatures and encryption")

test_that("RSA PKCS1 signatures", {
  key <- read_jwk("../keys/rsa-pkcs1.json")
  pubkey <- read_jwk("../keys/rsa-pkcs1.pub.json")
  data <- readBin("../keys/data", raw(), 1e4)
  sig <- readBin("../keys/rsa-pkcs1.sig", raw(), 1e4)
  expect_is(key, "key")
  expect_is(pubkey, "pubkey")
  expect_is(key, "rsa")
  expect_is(pubkey, "rsa")
  expect_identical(pubkey, as.list(key)$pubkey)
  expect_true(openssl::signature_verify(data, sig, openssl::sha256, pubkey))
  expect_true(openssl::signature_verify("../keys/data", "../keys/rsa-pkcs1.sig", openssl::sha256, pubkey))

  # Roundtrip jwk
  expect_identical(key, read_jwk(write_jwk(key)))
  expect_identical(pubkey, read_jwk(write_jwk(pubkey)))
})

test_that("RSA OAEP encryption", {
  key <- read_jwk("../keys/rsa-oaep.json")
  pubkey <- read_jwk("../keys/rsa-oaep.pub.json")
  data <- readBin("../keys/data", raw(), 1e4)
  bin <- readBin("../keys/rsa-oaep.bin", raw(), 1e4)
  expect_is(key, "key")
  expect_is(pubkey, "pubkey")
  expect_is(key, "rsa")
  expect_is(pubkey, "rsa")

  ## Does not work, rsa_decrypt does not use OAEP I think
  #expect_identical(data, openssl::rsa_decrypt(bin, key))
})

