@@ -330,7 +330,73 @@ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
330330 return 1 ;
331331}
332332
333+ EVP_PKEY * EVP_PKEY_new_raw_private_key (int type , ENGINE * unused ,
334+ const uint8_t * in , size_t len ) {
335+ EVP_PKEY * ret = EVP_PKEY_new ();
336+ if (ret == NULL ||
337+ !EVP_PKEY_set_type (ret , type )) {
338+ goto err ;
339+ }
340+
341+ if (ret -> ameth -> set_priv_raw == NULL ) {
342+ OPENSSL_PUT_ERROR (EVP , EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE );
343+ goto err ;
344+ }
345+
346+ if (!ret -> ameth -> set_priv_raw (ret , in , len )) {
347+ goto err ;
348+ }
349+
350+ return ret ;
351+
352+ err :
353+ EVP_PKEY_free (ret );
354+ return NULL ;
355+ }
356+
357+ EVP_PKEY * EVP_PKEY_new_raw_public_key (int type , ENGINE * unused ,
358+ const uint8_t * in , size_t len ) {
359+ EVP_PKEY * ret = EVP_PKEY_new ();
360+ if (ret == NULL ||
361+ !EVP_PKEY_set_type (ret , type )) {
362+ goto err ;
363+ }
364+
365+ if (ret -> ameth -> set_pub_raw == NULL ) {
366+ OPENSSL_PUT_ERROR (EVP , EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE );
367+ goto err ;
368+ }
369+
370+ if (!ret -> ameth -> set_pub_raw (ret , in , len )) {
371+ goto err ;
372+ }
373+
374+ return ret ;
375+
376+ err :
377+ EVP_PKEY_free (ret );
378+ return NULL ;
379+ }
333380
381+ int EVP_PKEY_get_raw_private_key (const EVP_PKEY * pkey , uint8_t * out ,
382+ size_t * out_len ) {
383+ if (pkey -> ameth -> get_priv_raw == NULL ) {
384+ OPENSSL_PUT_ERROR (EVP , EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE );
385+ return 0 ;
386+ }
387+
388+ return pkey -> ameth -> get_priv_raw (pkey , out , out_len );
389+ }
390+
391+ int EVP_PKEY_get_raw_public_key (const EVP_PKEY * pkey , uint8_t * out ,
392+ size_t * out_len ) {
393+ if (pkey -> ameth -> get_pub_raw == NULL ) {
394+ OPENSSL_PUT_ERROR (EVP , EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE );
395+ return 0 ;
396+ }
397+
398+ return pkey -> ameth -> get_pub_raw (pkey , out , out_len );
399+ }
334400
335401int EVP_PKEY_cmp_parameters (const EVP_PKEY * a , const EVP_PKEY * b ) {
336402 if (a -> type != b -> type ) {
0 commit comments