aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/ffi/ffi.h10
-rw-r--r--src/lib/ffi/ffi_keywrap.cpp8
-rw-r--r--src/tests/test_ffi.cpp37
3 files changed, 46 insertions, 9 deletions
diff --git a/src/lib/ffi/ffi.h b/src/lib/ffi/ffi.h
index 45cce37d2..7b14bdbd4 100644
--- a/src/lib/ffi/ffi.h
+++ b/src/lib/ffi/ffi.h
@@ -1057,13 +1057,13 @@ BOTAN_DLL int botan_x509_cert_allowed_usage(botan_x509_cert_t cert, unsigned int
/**
* Key wrapping as per RFC 3394
*/
-BOTAN_DLL int botan_key_wrap3394(uint8_t key[], size_t key_len,
- uint8_t kek[], size_t kek_len,
+BOTAN_DLL int botan_key_wrap3394(const uint8_t key[], size_t key_len,
+ const uint8_t kek[], size_t kek_len,
uint8_t wrapped_key[], size_t *wrapped_key_len);
-BOTAN_DLL int botan_key_unwrap3394( uint8_t wrapped_key[], size_t wrapped_key_len,
- uint8_t kek[], size_t kek_len,
- uint8_t key[], size_t *key_len);
+BOTAN_DLL int botan_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_key_len,
+ const uint8_t kek[], size_t kek_len,
+ uint8_t key[], size_t *key_len);
/*
* TLS (WIP)
diff --git a/src/lib/ffi/ffi_keywrap.cpp b/src/lib/ffi/ffi_keywrap.cpp
index d881140d6..22bb5280a 100644
--- a/src/lib/ffi/ffi_keywrap.cpp
+++ b/src/lib/ffi/ffi_keywrap.cpp
@@ -15,8 +15,8 @@ extern "C" {
using namespace Botan_FFI;
-int botan_key_wrap3394(uint8_t key[], size_t key_len,
- uint8_t kek[], size_t kek_len,
+int botan_key_wrap3394(const uint8_t key[], size_t key_len,
+ const uint8_t kek[], size_t kek_len,
uint8_t wrapped_key[], size_t* wrapped_key_len)
{
#if defined(BOTAN_HAS_RFC3394_KEYWRAP)
@@ -31,8 +31,8 @@ int botan_key_wrap3394(uint8_t key[], size_t key_len,
#endif
}
-int botan_key_unwrap3394(uint8_t wrapped_key[], size_t wrapped_key_len,
- uint8_t kek[], size_t kek_len,
+int botan_key_unwrap3394(const uint8_t wrapped_key[], size_t wrapped_key_len,
+ const uint8_t kek[], size_t kek_len,
uint8_t key[], size_t* key_len)
{
#if defined(BOTAN_HAS_RFC3394_KEYWRAP)
diff --git a/src/tests/test_ffi.cpp b/src/tests/test_ffi.cpp
index 706b47e48..482b190f8 100644
--- a/src/tests/test_ffi.cpp
+++ b/src/tests/test_ffi.cpp
@@ -367,6 +367,10 @@ class FFI_Unit_Tests : public Test
results.push_back(ffi_test_stream_ciphers());
results.push_back(ffi_test_pkcs_hash_id());
+#if defined(BOTAN_HAS_RFC3394_KEYWRAP)
+ results.push_back(ffi_test_keywrap());
+#endif
+
#if defined(BOTAN_HAS_RSA)
results.push_back(ffi_test_rsa(rng));
#endif
@@ -965,6 +969,39 @@ class FFI_Unit_Tests : public Test
TEST_FFI_OK(botan_pubkey_fingerprint, (pub, "SHA-512", fingerprint.data(), &fingerprint_len));
}
+ Test::Result ffi_test_keywrap()
+ {
+ Test::Result result("FFI keywrap");
+
+ const uint8_t key[16] = { 0 };
+ const uint8_t kek[16] = { 0xFF, 0 };
+
+ const uint8_t expected_wrapped_key[16+8] = {
+ 0x04, 0x13, 0x37, 0x39, 0x82, 0xCF, 0xFA, 0x31, 0x81, 0xCA, 0x4F, 0x59,
+ 0x74, 0x4D, 0xED, 0x29, 0x1F, 0x3F, 0xE5, 0x24, 0x00, 0x1B, 0x93, 0x20
+ };
+
+ uint8_t wrapped[16 + 8] = { 0 };
+ size_t wrapped_keylen = sizeof(wrapped);
+ TEST_FFI_OK(botan_key_wrap3394, (key, sizeof(key),
+ kek, sizeof(kek),
+ wrapped, &wrapped_keylen));
+
+ result.test_eq("Expected wrapped keylen size", wrapped_keylen, 16 + 8);
+
+ result.test_eq(nullptr, "Wrapped key", wrapped, wrapped_keylen,
+ expected_wrapped_key, sizeof(expected_wrapped_key));
+
+ uint8_t dec_key[16] = { 0 };
+ size_t dec_keylen = sizeof(dec_key);
+ TEST_FFI_OK(botan_key_unwrap3394, (wrapped, sizeof(wrapped),
+ kek, sizeof(kek),
+ dec_key, &dec_keylen));
+
+ result.test_eq(nullptr, "Unwrapped key", dec_key, dec_keylen, key, sizeof(key));
+ return result;
+ }
+
Test::Result ffi_test_rsa(botan_rng_t rng)
{
Test::Result result("FFI RSA");