Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F19741906
t-quick-key-manipulation.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
3 KB
Subscribers
None
t-quick-key-manipulation.py
View Options
#!/usr/bin/env python
# Copyright (C) 2017 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 General Public License as published by
# the Free Software Foundation; either version 2 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 <http://www.gnu.org/licenses/>.
from
__future__
import
absolute_import
,
print_function
,
unicode_literals
del
absolute_import
,
print_function
,
unicode_literals
import
gpg
import
support
alpha
=
"Alpha <alpha@invalid.example.net>"
bravo
=
"Bravo <bravo@invalid.example.net>"
with
support
.
EphemeralContext
()
as
ctx
:
res
=
ctx
.
create_key
(
alpha
,
certify
=
True
)
key
=
ctx
.
get_key
(
res
.
fpr
)
assert
len
(
key
.
subkeys
)
==
1
,
"Expected one primary key and no subkeys"
assert
len
(
key
.
uids
)
==
1
,
"Expected exactly one UID"
def
get_uid
(
uid
):
key
=
ctx
.
get_key
(
res
.
fpr
)
for
u
in
key
.
uids
:
if
u
.
uid
==
uid
:
return
u
return
None
# sanity check
uid
=
get_uid
(
alpha
)
assert
uid
,
"UID alpha not found"
assert
uid
.
revoked
==
0
# add bravo
ctx
.
key_add_uid
(
key
,
bravo
)
uid
=
get_uid
(
bravo
)
assert
uid
,
"UID bravo not found"
assert
uid
.
revoked
==
0
# revoke alpha
ctx
.
key_revoke_uid
(
key
,
alpha
)
uid
=
get_uid
(
alpha
)
assert
uid
,
"UID alpha not found"
assert
uid
.
revoked
==
1
uid
=
get_uid
(
bravo
)
assert
uid
,
"UID bravo not found"
assert
uid
.
revoked
==
0
# try to revoke the last UID
try
:
ctx
.
key_revoke_uid
(
key
,
alpha
)
# IMHO this should fail. issue2961.
# assert False, "Expected an error but got none"
except
gpg
.
errors
.
GpgError
:
pass
# Everything should be the same
uid
=
get_uid
(
alpha
)
assert
uid
,
"UID alpha not found"
assert
uid
.
revoked
==
1
uid
=
get_uid
(
bravo
)
assert
uid
,
"UID bravo not found"
assert
uid
.
revoked
==
0
# try to revoke a non-existent UID
try
:
ctx
.
key_revoke_uid
(
key
,
"i dont exist"
)
# IMHO this should fail. issue2963.
# assert False, "Expected an error but got none"
except
gpg
.
errors
.
GpgError
:
pass
# try to add an pre-existent UID
try
:
ctx
.
key_add_uid
(
key
,
bravo
)
assert
False
,
"Expected an error but got none"
except
gpg
.
errors
.
GpgError
:
pass
# Check setting the TOFU policy.
with
open
(
"gpg.conf"
,
"a"
)
as
handle
:
handle
.
write
(
"trust-model tofu+pgp
\n
"
)
for
name
,
policy
in
[(
name
,
getattr
(
gpg
.
constants
.
tofu
.
policy
,
name
))
for
name
in
filter
(
lambda
x
:
not
x
.
startswith
(
'__'
),
dir
(
gpg
.
constants
.
tofu
.
policy
))]:
if
policy
==
gpg
.
constants
.
tofu
.
policy
.
NONE
:
# We must not set the policy to NONE.
continue
ctx
.
key_tofu_policy
(
key
,
policy
)
keys
=
list
(
ctx
.
keylist
(
key
.
uids
[
0
]
.
uid
,
mode
=
(
gpg
.
constants
.
keylist
.
mode
.
LOCAL
|
gpg
.
constants
.
keylist
.
mode
.
WITH_TOFU
)))
assert
len
(
keys
)
==
1
if
policy
==
gpg
.
constants
.
tofu
.
policy
.
AUTO
:
# We cannot check that it is set to AUTO.
continue
for
uid
in
keys
[
0
]
.
uids
:
if
uid
.
uid
==
alpha
:
# TOFU information of revoked UIDs is not updated.
# XXX: Is that expected?
continue
assert
uid
.
tofu
[
0
]
.
policy
==
policy
,
\
"Expected policy {0} ({1}), got {2}"
.
format
(
policy
,
name
,
uid
.
tofu
[
0
]
.
policy
)
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Sat, Feb 1, 9:24 AM (1 d, 13 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
3f/bf/190f863575544fb5cecb6d688cda
Attached To
rM GPGME
Event Timeline
Log In to Comment