MCPcopy Create free account
hub / github.com/WasmEdge/WasmEdge / symmetricStateOpen

Method symmetricStateOpen

plugins/wasi_crypto/symmetric/ctx.cpp:223–268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

221}
222
223WasiCryptoExpect<__wasi_symmetric_state_t>
224Context::symmetricStateOpen(Symmetric::Algorithm Alg,
225 __wasi_opt_symmetric_key_t OptKeyHandle,
226 __wasi_opt_options_t OptOptionsHandle) noexcept {
227 // Copy from KeyManager.
228 auto OptKeyResult =
229 mapAndTransposeOptional(OptKeyHandle,
230 [this](__wasi_symmetric_key_t KeyHandle) noexcept
231 -> WasiCryptoExpect<Symmetric::KeyVariant> {
232 return SymmetricKeyManager.get(KeyHandle);
233 });
234 if (!OptKeyResult) {
235 return WasiCryptoUnexpect(OptKeyResult);
236 }
237
238 // Copy from OptionsManager.
239 auto OptOptionsResult = mapAndTransposeOptional(
240 OptOptionsHandle, [this](__wasi_options_t OptionsHandle) noexcept {
241 return OptionsManager.get(OptionsHandle);
242 });
243 if (!OptOptionsResult) {
244 return WasiCryptoUnexpect(OptOptionsResult);
245 }
246
247 // Refer to OptOptionsResult if it's a Smmetric::Options.
248 auto OptSymmetricOptionsResult = transposeOptionalToRef(
249 *OptOptionsResult,
250 [](const auto &Options) noexcept
251 -> WasiCryptoExpect<OptionalRef<const Symmetric::Options>> {
252 auto *SymmetricOptions = std::get_if<Symmetric::Options>(&Options);
253 if (!SymmetricOptions) {
254 return WasiCryptoUnexpect(__WASI_CRYPTO_ERRNO_INVALID_HANDLE);
255 }
256 return SymmetricOptions;
257 });
258 if (!OptSymmetricOptionsResult) {
259 return WasiCryptoUnexpect(OptSymmetricOptionsResult);
260 }
261
262 return Symmetric::openState(Alg, asOptionalRef(*OptKeyResult),
263 *OptSymmetricOptionsResult)
264 .and_then([this](auto &&State) noexcept {
265 return SymmetricStateManager.registerManager(
266 std::forward<decltype(State)>(State));
267 });
268}
269
270WasiCryptoExpect<__wasi_symmetric_state_t>
271Context::symmetricStateClone(__wasi_symmetric_state_t StateHandle) noexcept {

Callers 1

bodyMethod · 0.45

Calls 7

mapAndTransposeOptionalFunction · 0.85
WasiCryptoUnexpectFunction · 0.85
transposeOptionalToRefFunction · 0.85
openStateFunction · 0.85
asOptionalRefFunction · 0.85
registerManagerMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected