summaryrefslogtreecommitdiff
path: root/usr/src/lib/libresolv2/common/dnssafe/algobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libresolv2/common/dnssafe/algobj.c')
-rw-r--r--usr/src/lib/libresolv2/common/dnssafe/algobj.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/usr/src/lib/libresolv2/common/dnssafe/algobj.c b/usr/src/lib/libresolv2/common/dnssafe/algobj.c
new file mode 100644
index 0000000000..6be38586f9
--- /dev/null
+++ b/usr/src/lib/libresolv2/common/dnssafe/algobj.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1999 by Sun Microsystems, Inc.
+ * All rights reserved.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/* 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 "port_before.h"
+#include "global.h"
+#include "bsafe2.h"
+#include "bkey.h"
+#include "balg.h"
+#include "ainfotyp.h"
+#include "keyobj.h"
+#include "algobj.h"
+#include "port_after.h"
+
+static char ALGORITHM_TYPE_TAG = 0;
+
+int B_CreateAlgorithmObject (algorithmObject)
+B_ALGORITHM_OBJ *algorithmObject;
+{
+ AlgorithmWrap *algorithmWrap;
+
+ if ((*algorithmObject = T_malloc (sizeof (*algorithmWrap))) == NULL_PTR)
+ return (BE_ALLOC);
+
+ algorithmWrap = (AlgorithmWrap *)*algorithmObject;
+
+ /* First construct base class */
+ B_AlgorithmConstructor (&algorithmWrap->algorithm);
+
+ algorithmWrap->typeTag = &ALGORITHM_TYPE_TAG;
+ algorithmWrap->selfCheck = algorithmWrap;
+ return (0);
+}
+
+void B_DestroyAlgorithmObject (algorithmObject)
+B_ALGORITHM_OBJ *algorithmObject;
+{
+ AlgorithmWrap *algorithmWrap = (AlgorithmWrap *)*algorithmObject;
+
+ if (AlgorithmWrapCheck (algorithmWrap) == 0) {
+ /* zeroize self check to invalidate memory. */
+ algorithmWrap->selfCheck = (AlgorithmWrap *)NULL_PTR;
+
+ /* Call base class descructor */
+ B_AlgorithmDestructor (&algorithmWrap->algorithm);
+
+ T_free ((POINTER)algorithmWrap);
+ }
+
+ *algorithmObject = NULL_PTR;
+}
+
+int B_SetAlgorithmInfo (algorithmObject, infoType, info)
+B_ALGORITHM_OBJ algorithmObject;
+B_INFO_TYPE infoType;
+POINTER info;
+{
+ B_AlgorithmInfoType *algorithmInfoType;
+ int status;
+
+ if ((status = AlgorithmWrapCheck (THE_ALG_WRAP)) != 0)
+ return (status);
+
+ /* Get the AlgorithmInfoType from the B_INFO_TYPE, which returns
+ zero for an AlgorithmInfoType, non-zero for KeyInfoType
+ */
+ if ((*infoType) ((POINTER *)&algorithmInfoType) != 0)
+ return (BE_KEY_OPERATION_UNKNOWN);
+
+ return (B_AlgorithmSetInfo
+ (&THE_ALG_WRAP->algorithm, algorithmInfoType, info));
+}
+
+int B_GetAlgorithmInfo (info, algorithmObject, infoType)
+POINTER *info;
+B_ALGORITHM_OBJ algorithmObject;
+B_INFO_TYPE infoType;
+{
+ B_AlgorithmInfoType *algorithmInfoType;
+ int status;
+
+ if ((status = AlgorithmWrapCheck (THE_ALG_WRAP)) != 0)
+ return (status);
+
+ /* Get the AlgorithmInfoType from the B_INFO_TYPE, which returns
+ zero for an AlgorithmInfoType, non-zero for KeyInfoType
+ */
+ if ((*infoType) ((POINTER *)&algorithmInfoType) != 0)
+ return (BE_KEY_OPERATION_UNKNOWN);
+
+ return (B_AlgorithmGetInfo
+ (&THE_ALG_WRAP->algorithm, info, algorithmInfoType));
+}
+
+/* Return 0 if this is a valid AlgorithmWrap object. Return BE_ALGORITHM_OBJ if
+ algorithmWrap is NULL_PTR or invalid.
+ */
+int AlgorithmWrapCheck (algorithmWrap)
+AlgorithmWrap *algorithmWrap;
+{
+ return ((algorithmWrap != (AlgorithmWrap *)NULL_PTR &&
+ algorithmWrap->selfCheck == algorithmWrap &&
+ algorithmWrap->typeTag == &ALGORITHM_TYPE_TAG) ?
+ 0 : BE_ALGORITHM_OBJ);
+}
+
+/* Like AlgorithmWrapCheck except returns BE_RANDOM_OBJ for error.
+ Also, return OK status if randomAlgorithm is NULL_PTR.
+ */
+int RandomAlgorithmCheck (randomAlgorithm)
+B_ALGORITHM_OBJ randomAlgorithm;
+{
+ if (randomAlgorithm == NULL_PTR)
+ return (0);
+
+ return (AlgorithmWrapCheck ((AlgorithmWrap *)randomAlgorithm) ?
+ BE_RANDOM_OBJ : 0);
+}
+