diff options
Diffstat (limited to 'lib/dns/sec/dnssafe/ki8byte.c')
-rw-r--r-- | lib/dns/sec/dnssafe/ki8byte.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/dns/sec/dnssafe/ki8byte.c b/lib/dns/sec/dnssafe/ki8byte.c new file mode 100644 index 00000000..306cc7b1 --- /dev/null +++ b/lib/dns/sec/dnssafe/ki8byte.c @@ -0,0 +1,70 @@ +/* Copyright (C) RSA Data Security, Inc. created 1990, 1996. This is an + unpublished work protected as such under copyright law. This work + contains proprietary, confidential, and trade secret information of + RSA Data Security, Inc. Use, disclosure or reproduction without the + express written authorization of RSA Data Security, Inc. is + prohibited. + */ + +#include "global.h" +#include "bsafe2.h" +#include "bkey.h" +#include "kinfotyp.h" +#include "kiitem.h" +#include "ki8byte.h" + +int KIT_8ByteAddInfo PROTO_LIST ((B_Key *, POINTER)); +int KIT_8ByteMakeInfo PROTO_LIST ((POINTER *, B_Key *)); + +B_KeyInfoType KIT_8Byte = {KIT_8ByteAddInfo, KIT_8ByteMakeInfo}; + +int KI_8Byte (keyInfoType) +POINTER *keyInfoType; +{ + *keyInfoType = (POINTER)&KIT_8Byte; + + /* Return 1 to indicate a KeyInfoType, not an AlgorithmInfoType */ + return (1); +} + +/* info points to 8 byte key. + Cache as a KITItem and a KIT_8Byte. + */ +int KIT_8ByteAddInfo (key, info) +B_Key *key; +POINTER info; +{ + POINTER newData; + int status; + + /* Copy the 8 byte key. */ + if ((status = B_MemoryPoolAllocAndCopy + (&key->infoCache.memoryPool, &newData, info, 8)) != 0) + return (status); + + /* Cache as a KITItem as well as KIT_8Byte. + */ + if ((status = B_KeyAddItemInfo (key, (unsigned char *)newData, 8)) != 0) + return (status); + return (B_InfoCacheAddInfo (&key->infoCache, (POINTER)&KIT_8Byte, newData)); +} + +int KIT_8ByteMakeInfo (info, key) +POINTER *info; +B_Key *key; +{ + ITEM *item; + int status; + + /* Try to make one from a KI_Item. Since KI_Item doesn't + call KI_8Byte, this should not cause an endless loop. + */ + if ((status = B_KeyGetInfo (key, (POINTER *)&item, &KITItem)) != 0) + return (status); + if (item->len != 8) + return (BE_WRONG_KEY_INFO); + + *(unsigned char **)info = item->data; + return (0); +} + |