📄 pgpgroups.h
字号:
/*____________________________________________________________________________
Copyright (C) 1997 Network Associates Inc. and affiliated companies.
All rights reserved.
$Id: pgpGroups.h,v 1.6 1999/03/10 02:51:18 heller Exp $
____________________________________________________________________________*/
#ifndef Included_pgpGroups_h /* [ */
#define Included_pgpGroups_h
#include "pgpPubTypes.h"
#include "pgpEncode.h"
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=mac68k
#endif
#define kPGPMaxGroupNameLength 63
#define kPGPMaxGroupDescriptionLength 63
typedef char PGPGroupName[ kPGPMaxGroupNameLength + 1 ];
typedef char PGPGroupDescription[ kPGPMaxGroupDescriptionLength + 1 ];
typedef struct PGPGroupSet * PGPGroupSetRef;
typedef struct PGPGroupIter * PGPGroupItemIterRef;
#define kInvalidPGPGroupSetRef ((PGPGroupSetRef) NULL)
#define kInvalidPGPGroupItemIterRef ((PGPGroupItemIterRef) NULL)
#define PGPGroupSetRefIsValid(ref) ((ref) != kInvalidPGPGroupSetRef)
#define PGPGroupItemIterRefIsValid(ref) ((ref) != kInvalidPGPGroupItemIterRef)
/* any type will do that is distinct */
typedef PGPUInt32 PGPGroupID;
#define kPGPInvalidGroupID ( (PGPGroupID)0 )
enum PGPGroupItemType_
{
kPGPGroupItem_KeyID = 1,
kPGPGroupItem_Group,
PGP_ENUM_FORCE( PGPGroupItemType_)
};
PGPENUM_TYPEDEF( PGPGroupItemType_, PGPGroupItemType );
/*____________________________________________________________________________
A run-time group item, used when iterating through a group.
For client use; not necessarily the internal storage format.
'userValue' is *not* saved to disk.
____________________________________________________________________________*/
typedef struct PGPGroupItem
{
PGPGroupItemType type;
PGPUserValue userValue;
union
{
/* type selects which substructure */
struct /* if kGroupItem_Group */
{
PGPGroupID id;
} group;
struct /* if kGroupItem_KeyID */
{
PGPPublicKeyAlgorithm algorithm;
PGPKeyID keyID;
} key;
} u;
PGPUInt32 reserved[4];
} PGPGroupItem;
typedef PGPInt32 (*PGPGroupItemCompareProc)( PGPGroupItem *,
PGPGroupItem *, PGPUserValue userValue );
/*____________________________________________________________________________
Info obtained via PGPGetGroupInfo.
____________________________________________________________________________*/
typedef struct PGPGroupInfo
{
PGPGroupID id;
PGPGroupName name;
PGPGroupName description;
PGPUserValue userValue;
} PGPGroupInfo;
typedef PGPFlags PGPGroupItemIterFlags;
/* flag (1UL << 0 ) is reserved */
#define kPGPGroupIterFlags_Recursive (PGPFlags)(1UL << 1 )
#define kPGPGroupIterFlags_Keys (PGPFlags)(1UL << 2 )
#define kPGPGroupIterFlags_Groups (PGPFlags)(1UL << 3 )
#define kPGPGroupIterFlags_AllKeysRecursive \
( kPGPGroupIterFlags_Recursive | kPGPGroupIterFlags_Keys )
#define kPGPGroupIterFlags_AllGroupsRecursive \
( kPGPGroupIterFlags_Recursive | kPGPGroupIterFlags_Groups )
#define kPGPGroupIterFlags_AllItems \
( kPGPGroupIterFlags_Keys | kPGPGroupIterFlags_Groups )
#define kPGPGroupIterFlags_AllRecursive \
( kPGPGroupIterFlags_Recursive | kPGPGroupIterFlags_AllItems )
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=reset
#endif
PGP_BEGIN_C_DECLARATIONS
#if PRAGMA_IMPORT_SUPPORTED
#pragma import on
#endif
/*____________________________________________________________________________
Manipulating pgp group sets (PGPGroupSetRef)
____________________________________________________________________________*/
/* create a new, empty groups collection */
PGPError PGPNewGroupSet( PGPContextRef context, PGPGroupSetRef *outRef );
/* file is *not* left open; all data is loaded into memory */
PGPError PGPNewGroupSetFromFile( PGPContextRef context,
PGPFileSpecRef file,
PGPGroupSetRef *outRef );
#if PGP_MACINTOSH
PGPError PGPNewGroupSetFromFSSpec( PGPContextRef context,
const FSSpec *spec, PGPGroupSetRef *outRef );
#endif
/* overwrites existing. Don't bother unless PGPGroupSetNeedsCommit() */
PGPError PGPSaveGroupSetToFile( PGPGroupSetRef set, PGPFileSpecRef file );
/* free all data structures; be sure to save first if you want */
PGPError PGPFreeGroupSet( PGPGroupSetRef set );
/* has the group changed? */
PGPBoolean PGPGroupSetNeedsCommit( PGPGroupSetRef set );
PGPContextRef PGPGetGroupSetContext( PGPGroupSetRef set );
/* export the groupset to a buffer. Use PGPFreeData to free the buffer */
PGPError PGPExportGroupSetToBuffer( PGPGroupSetRef set, void **buffer,
PGPSize *bufferSize );
/* import a groupset from a buffer */
PGPError PGPImportGroupSetFromBuffer(PGPContextRef context, void *buffer,
PGPSize bufSize, PGPGroupSetRef *outSet );
/*____________________________________________________________________________
Manipulating groups
Groups are always referred to by IDs which remain valid until the set
is disposed.
____________________________________________________________________________*/
/* initial parent ID is kPGPInvalidGroupID */
PGPError PGPNewGroup( PGPGroupSetRef set,
const char * name, const char *description, PGPGroupID *id );
PGPError PGPCountGroupsInSet( PGPGroupSetRef set,
PGPUInt32 *numGroups);
PGPError PGPGetIndGroupID( PGPGroupSetRef set,
PGPUInt32 groupIndex, PGPGroupID *id );
/* delete this group from the set */
/* All references to it are removed in all sets */
PGPError PGPDeleteGroup( PGPGroupSetRef set, PGPGroupID id );
/* delete the indexed item from the group */
/* the item may be a group or a key */
PGPError PGPDeleteIndItemFromGroup( PGPGroupSetRef set,
PGPGroupID id, PGPUInt32 item );
/* same as PGPDeleteIndItemFromGroup, but accepts an item */
PGPError PGPDeleteItemFromGroup( PGPGroupSetRef set,
PGPGroupID id, PGPGroupItem const *item );
PGPError PGPGetGroupInfo( PGPGroupSetRef set,
PGPGroupID id, PGPGroupInfo *info );
PGPError PGPSetGroupName( PGPGroupSetRef set,
PGPGroupID id, const char * name );
PGPError PGPSetGroupUserValue( PGPGroupSetRef set,
PGPGroupID id, PGPUserValue userValue );
PGPError PGPSetGroupDescription( PGPGroupSetRef set,
PGPGroupID id, const char * name );
/* 'item' specifies a group or a key id */
/* you must fill the item in completely */
PGPError PGPAddItemToGroup( PGPGroupSetRef set,
PGPGroupItem const *item, PGPGroupID group );
PGPError PGPMergeGroupIntoDifferentSet( PGPGroupSetRef fromSet,
PGPGroupID fromID, PGPGroupSetRef toSet );
PGPError PGPMergeGroupSets( PGPGroupSetRef fromSet,
PGPGroupSetRef intoSet );
PGPError PGPCopyGroupSet(PGPGroupSetRef sourceSet,
PGPGroupSetRef *destSet);
/*____________________________________________________________________________
Manipulating group items
____________________________________________________________________________*/
/* count how many items there are in a group */
/* totalItems includes keys and groups */
PGPError PGPCountGroupItems( PGPGroupSetRef set,
PGPGroupID id, PGPBoolean recursive,
PGPUInt32 * numKeys,
PGPUInt32 * totalItems );
/* non-recursive call; index only applies to group itself */
PGPError PGPGetIndGroupItem( PGPGroupSetRef set,
PGPGroupID id, PGPUInt32 groupIndex, PGPGroupItem * item );
/* use PGPGetIndGroupItem() if you want to get the user value */
PGPError PGPSetIndGroupItemUserValue( PGPGroupSetRef set,
PGPGroupID id, PGPUInt32 groupIndex, PGPUserValue userValue );
PGPError PGPSortGroupItems( PGPGroupSetRef set, PGPGroupID id,
PGPGroupItemCompareProc, PGPUserValue userValue );
PGPError PGPSortGroupSet( PGPGroupSetRef set,
PGPGroupItemCompareProc, PGPUserValue userValue );
/*____________________________________________________________________________
PGPGroupItemIterRef--iterator through group items.
Special note: this is not a full-fledged iterator. You may *not* add
or delete items while iterating and you may only move forward. However,
you may change the values of items.
____________________________________________________________________________*/
PGPError PGPNewGroupItemIter( PGPGroupSetRef set, PGPGroupID id,
PGPGroupItemIterFlags flags, PGPGroupItemIterRef *iter );
PGPError PGPFreeGroupItemIter( PGPGroupItemIterRef iter );
/* returns kPGPError_EndOfIteration when done */
PGPError PGPGroupItemIterNext( PGPGroupItemIterRef iter,
PGPGroupItem * item );
/*____________________________________________________________________________
Group utilities
____________________________________________________________________________*/
/*____________________________________________________________________________
Return the lowest validity of any item in the group
keyset should contain all keys available
It is not an error if keys can't be found; you may want to check
the not found count.
The lowest validity is kPGPValidity_Invalid and kPGPValidity_Unknown
is never returned.
____________________________________________________________________________*/
PGPError PGPGetGroupLowestValidity( PGPGroupSetRef set, PGPGroupID id,
PGPKeySetRef keySet, PGPValidity * lowestValidity,
PGPUInt32 * numKeysNotFound);
/*____________________________________________________________________________
All all the keys in the group (and its subgroups) to the keyset
____________________________________________________________________________*/
PGPError PGPNewKeySetFromGroup( PGPGroupSetRef set, PGPGroupID id,
PGPKeySetRef masterSet, PGPKeySetRef * resultSet,
PGPUInt32 * numKeysNotFound);
/*____________________________________________________________________________
Create a simple, flattened group of unique key IDs from the source group.
Note that sourceSet and destSet must be different.
____________________________________________________________________________*/
PGPError PGPNewFlattenedGroupFromGroup(PGPGroupSetRef sourceSet,
PGPGroupID sourceID, PGPGroupSetRef destSet,
PGPGroupID *destID);
/*____________________________________________________________________________
Perform a "standard" sort on a group
____________________________________________________________________________*/
PGPError PGPSortGroupSetStd( PGPGroupSetRef set, PGPKeySetRef keys );
#if PRAGMA_IMPORT_SUPPORTED
#pragma import reset
#endif
PGP_END_C_DECLARATIONS
#endif /* ] Included_pgpGroups_h */
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -