RIFFWEBPVP8X ALPHz)NaصE.̱nmwww H5uΜa~ˆ~oeW|aV_:]\iVۦ6ؿ÷i]65b%ymniU]^^|ŇdOZV˗/_V_\nP\Qu<_+*m߮'O$C_}QǹQjEZ;\Q<=)?U(Qc_,Vޛr^˷6Uq(Lߡ9e ;R*7lLݰqkcA׫$O`l^Xlک}jRm*;^~W^\$%W^~_/"^H@G5KIJ A  p)Ax9A+sF+Vd\kUz#\׹*@Γ<:/gTtեiqs$)XҚq臒Q(InDRZj$aKtS.IQ}.2>EX҂OqDIҍ`)X8 qܭDI~Pe'R8 !4XRAubIn38NJ$:xG)Vdw;sEbxP O{h~<3JR@ޑt.Z<)(XJ/W,)/M8Aqi CuJZQ JRjII)VŒKm"I~nBN+$bI4"Œj<8T"AEE&OǨ*%)RjI;SEbQkMw]|LUJR+7J}VW '/h:Krly(WHI4<_XREQKwҜF2$XRU]ၔ(ߩ:o*$)(Thx H˃fU$s\X+[jNWXvť1O DII@ c'Q 3S gDO(Jġ/*RfR#UFxCq9=Y.(H0z~7BREQHn8SJIqq,)z9IaI`ZaE+d&QŒ*fSSG&m)*(SUQbV媬*GIz1.zMo\'8r=+>kpJI&`>JR)5v)(}R{qyr<ٗ=~t$-^  ˦;p :~ɗtgФwٴ'۽.` ]؍4'OpDGyנI'L9MU5jtF:hE&xڍv4ud'bzRw轑߼@ H:{OUw: 6O^0r\GqwU7s>pFU{w9Q\;j;=Γ;-A˶mo[+K;dxLw7. -fK2lII;̧wLI6[͖d/ ͖d٬w:W8oF~@GחRuO&4ҍ(Zmꎽ:c:6fcLsM{ X 4ߴ&y1b9Xۍb8ڏ;N8V@fkTK]f9d]c^,Ǒk;pl8Gߥ0M r6e\)Pu~> Gfܣwv?B?}l3GEmRk;r›k^]0,9jRrIO\ ,desfƳ۽sF8j_Щ`ݝdX2;gJm 𜴰yg `d^rͰ_h&wο6So&?W>sωZAbұu~zqزfOOAI?=Jw}?%Mꆒ pW-;r;Yx=L]s/%e|q'Va:9FY'%2 3b>{|YVYۺ6<6,n@-0{.59>n?>}w||%YV: #ֶ.}7wcuBZ?X޾:1pv]o#sIْL|,9ΞϔOYyQJ9L WȃE)ǯqPc_Oɗ4e4 (M۔@ h跬c5kY W맲×6 Ok`{xzyA;0 hYRS-ál7||s<{RNZ|[f=Y@k88neAK:RN<5;l?7ݹu^]q#Gv%z ÀqD׵/#44/8wl_]1?ω[!0.eYƪF|NQp/9r< !#ӟ3x~+5-qꦴ ~7 [4ß`,PΥN{aE+Nz캡/ qu-=,P54 wjNN>xުQz<ߟ2u킚}7wú< 8m}h_(0:oƭˑ=WO|}lmk<߄ ^7gowCw&}-ꂲoKʎv068zϞOx0u{'ׇ&{vwk@>j^+Cs{ g>p-cyo<-xvXtQt>czLv< O0oG={î[Ÿ_{{j)kgdA_e`C{RuF##׌b:r T#Q|#ՌT]`a93p c y08y9pΜ3Rp 3ͼox7;x;o]8ü<`FfF)`C>RT<`TT3r͠04h~s/\V#׌6R]o.VP8 9*>Q(F#$p Mi%kU~n>{^`?e+;w@{Q'V_?ߵ_?a=;|2u'J 9¨_bōޱ7zXcwnޱ!\59h'B|qY:L!F޵!%t^/'}f_Xԅ]=S~ DŽaP&\q`fv ; D-dYt w%BGPo}7_$|Fq%?)t^n5+WCXF|CNO.'{|[xxkGDV0YvBjx]rw˱|Б݀7gZ#6o ۈ/>Uh8\d< ߭ .gS#H+`#ՒUF4/7۳7\:R8f!*P* OP0LHw͢h>q2}+vO Fxrt3,. |N8PrKi#͑SG}%+$ bQȟ2F_qU ʩG |uZe7~LK.DUN'..M}ґGNݳiwksDxce{/pk 7ރ P*P1A ֨.I=͠#PLuV 1-+$$-?4 At1jS>s}?rU?K>7N8d7=I%_B.)tN0VUӇaP'\ꈱqBC!=r_ ]da_~Uu4 xP$wr)Ǯ&vP-"A"ˏzIʡZe<lyؔvѶRWD%6*v}U^|r5g$Ut朹Zd ٩9ӹvܒ-m"o6NaZ?¯0;_# $6B$nEyCΓN}Qi~5z }[foQ6Ped z0鱫 }g,n&aM>hj89So1Mxx]Qe? FbPB28eJZ^sjFYk~4WUj1fx[܏H8k*1tMҐ%bo Zl];MS򐋋0eBk2L2owS@z MgʔKNJ7=<,̏Udpg\fI9ZEE7PW$Z6 (0{k f/@\7q'_Yg$QII 1fj\jX dxi0}a$XWIIaԢpHI"HM6"doJoUvsB4 )ZlEc˝r=ݢ$/:yX4owQʖ# axӦ7?$W:+Gm)80Bj&"r_p*rᣤF>>e'q|H~20^pSx=Ŗ_( wdê0oBG]$-#|YzWrF<V?m^и/J:5.7c'~AL^['uz (CeI}MK!x.|u>\Օ>sbTKB(OGs{h+gAtW&ߧ?6<1 yE2q|5?*_FӒڻw S :̽b%h,r*A&0;@2j+rteΠEXIFExifII*V^(ifHH02100100XMP /* * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef OPENSSL_CORE_H # define OPENSSL_CORE_H # pragma once # include # include # ifdef __cplusplus extern "C" { # endif /*- * Base types * ---------- * * These are the types that the OpenSSL core and providers have in common * to communicate data between them. */ /* Opaque handles to be used with core upcall functions from providers */ typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; typedef struct ossl_core_bio_st OSSL_CORE_BIO; /* * Dispatch table element. function_id numbers and the functions are defined * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. * * An array of these is always terminated by function_id == 0 */ struct ossl_dispatch_st { int function_id; void (*function)(void); }; # define OSSL_DISPATCH_END \ { 0, NULL } /* * Other items, essentially an int<->pointer map element. * * We make this type distinct from OSSL_DISPATCH to ensure that dispatch * tables remain tables with function pointers only. * * This is used whenever we need to pass things like a table of error reason * codes <-> reason string maps, ... * * Usage determines which field works as key if any, rather than field order. * * An array of these is always terminated by id == 0 && ptr == NULL */ struct ossl_item_st { unsigned int id; void *ptr; }; /* * Type to tie together algorithm names, property definition string and * the algorithm implementation in the form of a dispatch table. * * An array of these is always terminated by algorithm_names == NULL */ struct ossl_algorithm_st { const char *algorithm_names; /* key */ const char *property_definition; /* key */ const OSSL_DISPATCH *implementation; const char *algorithm_description; }; /* * Type to pass object data in a uniform way, without exposing the object * structure. * * An array of these is always terminated by key == NULL */ struct ossl_param_st { const char *key; /* the name of the parameter */ unsigned int data_type; /* declare what kind of content is in buffer */ void *data; /* value being passed in or out */ size_t data_size; /* data size */ size_t return_size; /* returned content size */ }; /* Currently supported OSSL_PARAM data types */ /* * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER * are arbitrary length and therefore require an arbitrarily sized buffer, * since they may be used to pass numbers larger than what is natively * available. * * The number must be buffered in native form, i.e. MSB first on B_ENDIAN * systems and LSB first on L_ENDIAN systems. This means that arbitrary * native integers can be stored in the buffer, just make sure that the * buffer size is correct and the buffer itself is properly aligned (for * example by having the buffer field point at a C integer). */ # define OSSL_PARAM_INTEGER 1 # define OSSL_PARAM_UNSIGNED_INTEGER 2 /*- * OSSL_PARAM_REAL * is a C binary floating point values in native form and alignment. */ # define OSSL_PARAM_REAL 3 /*- * OSSL_PARAM_UTF8_STRING * is a printable string. It is expected to be printed as it is. */ # define OSSL_PARAM_UTF8_STRING 4 /*- * OSSL_PARAM_OCTET_STRING * is a string of bytes with no further specification. It is expected to be * printed as a hexdump. */ # define OSSL_PARAM_OCTET_STRING 5 /*- * OSSL_PARAM_UTF8_PTR * is a pointer to a printable string. It is expected to be printed as it is. * * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers * are manipulated for this type. * * This is more relevant for parameter requests, where the responding * function doesn't need to copy the data to the provided buffer, but * sets the provided buffer to point at the actual data instead. * * WARNING! Using these is FRAGILE, as it assumes that the actual * data and its location are constant. * * EXTRA WARNING! If you are not completely sure you most likely want * to use the OSSL_PARAM_UTF8_STRING type. */ # define OSSL_PARAM_UTF8_PTR 6 /*- * OSSL_PARAM_OCTET_PTR * is a pointer to a string of bytes with no further specification. It is * expected to be printed as a hexdump. * * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers * are manipulated for this type. * * This is more relevant for parameter requests, where the responding * function doesn't need to copy the data to the provided buffer, but * sets the provided buffer to point at the actual data instead. * * WARNING! Using these is FRAGILE, as it assumes that the actual * data and its location are constant. * * EXTRA WARNING! If you are not completely sure you most likely want * to use the OSSL_PARAM_OCTET_STRING type. */ # define OSSL_PARAM_OCTET_PTR 7 /* * Typedef for the thread stop handling callback. Used both internally and by * providers. * * Providers may register for notifications about threads stopping by * registering a callback to hear about such events. Providers register the * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch * table passed to OSSL_provider_init(). The arg passed back to a provider will * be the provider side context object. */ typedef void (*OSSL_thread_stop_handler_fn)(void *arg); /*- * Provider entry point * -------------------- * * This function is expected to be present in any dynamically loadable * provider module. By definition, if this function doesn't exist in a * module, that module is not an OpenSSL provider module. */ /*- * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used * together with some functions passed via |in| to query data. * |in| is the array of functions that the Core passes to the provider. * |out| will be the array of base functions that the provider passes * back to the Core. * |provctx| a provider side context object, optionally created if the * provider needs it. This value is passed to other provider * functions, notably other context constructors. */ typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in, const OSSL_DISPATCH **out, void **provctx); # ifdef __VMS # pragma names save # pragma names uppercase,truncated # endif OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; # ifdef __VMS # pragma names restore # endif /* * Generic callback function signature. * * The expectation is that any provider function that wants to offer * a callback / hook can do so by taking an argument with this type, * as well as a pointer to caller-specific data. When calling the * callback, the provider function can populate an OSSL_PARAM array * with data of its choice and pass that in the callback call, along * with the caller data argument. * * libcrypto may use the OSSL_PARAM array to create arguments for an * application callback it knows about. */ typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], OSSL_PARAM out_params[], void *arg); /* * Passphrase callback function signature * * This is similar to the generic callback function above, but adds a * result parameter. */ typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, size_t *pass_len, const OSSL_PARAM params[], void *arg); # ifdef __cplusplus } # endif #endif