Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F18824934
decrypt-verify.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
5 KB
Subscribers
None
decrypt-verify.c
View Options
/* decrypt-verify.c - Decrypt and verify function.
* Copyright (C) 2000 Werner Koch (dd9jn)
* Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see <https://gnu.org/licenses/>.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
#if HAVE_CONFIG_H
#include
<config.h>
#endif
#include
<assert.h>
#include
"debug.h"
#include
"gpgme.h"
#include
"ops.h"
static
gpgme_error_t
decrypt_verify_status_handler
(
void
*
priv
,
gpgme_status_code_t
code
,
char
*
args
)
{
gpgme_error_t
err
;
err
=
_gpgme_progress_status_handler
(
priv
,
code
,
args
);
if
(
!
err
)
err
=
_gpgme_decrypt_status_handler
(
priv
,
code
,
args
);
if
(
!
err
)
err
=
_gpgme_verify_status_handler
(
priv
,
code
,
args
);
return
err
;
}
static
gpgme_error_t
decrypt_verify_start
(
gpgme_ctx_t
ctx
,
int
synchronous
,
gpgme_decrypt_flags_t
flags
,
gpgme_data_t
cipher
,
gpgme_data_t
plain
)
{
gpgme_error_t
err
;
assert
((
flags
&
GPGME_DECRYPT_VERIFY
));
err
=
_gpgme_op_reset
(
ctx
,
synchronous
);
if
(
err
)
return
err
;
err
=
_gpgme_op_decrypt_init_result
(
ctx
,
plain
);
if
(
err
)
return
err
;
err
=
_gpgme_op_verify_init_result
(
ctx
);
if
(
err
)
return
err
;
if
(
!
cipher
)
return
gpg_error
(
GPG_ERR_NO_DATA
);
if
(
!
plain
)
return
gpg_error
(
GPG_ERR_INV_VALUE
);
if
(
ctx
->
passphrase_cb
)
{
err
=
_gpgme_engine_set_command_handler
(
ctx
->
engine
,
_gpgme_passphrase_command_handler
,
ctx
);
if
(
err
)
return
err
;
}
_gpgme_engine_set_status_handler
(
ctx
->
engine
,
decrypt_verify_status_handler
,
ctx
);
return
_gpgme_engine_op_decrypt
(
ctx
->
engine
,
flags
,
cipher
,
plain
,
ctx
->
export_session_keys
,
ctx
->
override_session_key
,
ctx
->
auto_key_retrieve
);
}
/* Decrypt ciphertext CIPHER and make a signature verification within
CTX and store the resulting plaintext in PLAIN. */
gpgme_error_t
gpgme_op_decrypt_verify_start
(
gpgme_ctx_t
ctx
,
gpgme_data_t
cipher
,
gpgme_data_t
plain
)
{
gpgme_error_t
err
;
TRACE_BEG
(
DEBUG_CTX
,
"gpgme_op_decrypt_verify_start"
,
ctx
,
"cipher=%p, plain=%p"
,
cipher
,
plain
);
if
(
!
ctx
)
return
TRACE_ERR
(
gpg_error
(
GPG_ERR_INV_VALUE
));
err
=
decrypt_verify_start
(
ctx
,
0
,
GPGME_DECRYPT_VERIFY
,
cipher
,
plain
);
return
TRACE_ERR
(
err
);
}
/* Decrypt ciphertext CIPHER and make a signature verification within
CTX and store the resulting plaintext in PLAIN. */
gpgme_error_t
gpgme_op_decrypt_verify
(
gpgme_ctx_t
ctx
,
gpgme_data_t
cipher
,
gpgme_data_t
plain
)
{
gpgme_error_t
err
;
TRACE_BEG
(
DEBUG_CTX
,
"gpgme_op_decrypt_verify"
,
ctx
,
"cipher=%p, plain=%p"
,
cipher
,
plain
);
if
(
!
ctx
)
return
TRACE_ERR
(
gpg_error
(
GPG_ERR_INV_VALUE
));
err
=
decrypt_verify_start
(
ctx
,
1
,
GPGME_DECRYPT_VERIFY
,
cipher
,
plain
);
if
(
!
err
)
err
=
_gpgme_wait_one
(
ctx
);
ctx
->
ignore_mdc_error
=
0
;
/* Always reset. */
return
TRACE_ERR
(
err
);
}
/* Decrypt ciphertext CIPHER within CTX and store the resulting
plaintext in PLAIN. */
gpgme_error_t
gpgme_op_decrypt_ext_start
(
gpgme_ctx_t
ctx
,
gpgme_decrypt_flags_t
flags
,
gpgme_data_t
cipher
,
gpgme_data_t
plain
)
{
gpgme_error_t
err
;
TRACE_BEG
(
DEBUG_CTX
,
"gpgme_op_decrypt_ext_start"
,
ctx
,
"cipher=%p, plain=%p"
,
cipher
,
plain
);
if
(
!
ctx
)
return
TRACE_ERR
(
gpg_error
(
GPG_ERR_INV_VALUE
));
if
((
flags
&
GPGME_DECRYPT_VERIFY
))
err
=
decrypt_verify_start
(
ctx
,
0
,
flags
,
cipher
,
plain
);
else
err
=
_gpgme_decrypt_start
(
ctx
,
0
,
flags
,
cipher
,
plain
);
return
TRACE_ERR
(
err
);
}
/* Decrypt ciphertext CIPHER within CTX and store the resulting
plaintext in PLAIN. */
gpgme_error_t
gpgme_op_decrypt_ext
(
gpgme_ctx_t
ctx
,
gpgme_decrypt_flags_t
flags
,
gpgme_data_t
cipher
,
gpgme_data_t
plain
)
{
gpgme_error_t
err
;
TRACE_BEG
(
DEBUG_CTX
,
"gpgme_op_decrypt_ext"
,
ctx
,
"cipher=%p, plain=%p"
,
cipher
,
plain
);
if
(
!
ctx
)
return
TRACE_ERR
(
gpg_error
(
GPG_ERR_INV_VALUE
));
if
((
flags
&
GPGME_DECRYPT_VERIFY
))
err
=
decrypt_verify_start
(
ctx
,
1
,
flags
,
cipher
,
plain
);
else
err
=
_gpgme_decrypt_start
(
ctx
,
1
,
flags
,
cipher
,
plain
);
if
(
!
err
)
err
=
_gpgme_wait_one
(
ctx
);
ctx
->
ignore_mdc_error
=
0
;
/* Always reset. */
return
TRACE_ERR
(
err
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Mon, Dec 23, 1:38 PM (11 h, 28 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b5/64/bdac23d2cb4a2dbfd9ccba064447
Attached To
rM GPGME
Event Timeline
Log In to Comment