keyres.c
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:4k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  * 
  13.  * The Original Code is the Netscape security libraries.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are 
  17.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  18.  * Rights Reserved.
  19.  * 
  20.  * Contributor(s):
  21.  * 
  22.  * Alternatively, the contents of this file may be used under the
  23.  * terms of the GNU General Public License Version 2 or later (the
  24.  * "GPL"), in which case the provisions of the GPL are applicable 
  25.  * instead of those above.  If you wish to allow use of your 
  26.  * version of this file only under the terms of the GPL and not to
  27.  * allow others to use your version of this file under the MPL,
  28.  * indicate your decision by deleting the provisions above and
  29.  * replace them with the notice and other provisions required by
  30.  * the GPL.  If you do not delete the provisions above, a recipient
  31.  * may use your version of this file under either the MPL or the
  32.  * GPL.
  33.  */
  34. #include "serv.h"
  35. #include "kgenctxt.h"
  36. #include "pk11func.h"
  37. #define SSMRESOURCE(object) (&(object)->super)
  38. SSMStatus
  39. SSMKeyPair_Create(void *arg, SSMControlConnection * connection, 
  40.                   SSMResource **res)
  41. {
  42.     SSMKeyPair          *keyPair    = NULL;
  43.     SSMKeyPairArg       *keyPairArg = (SSMKeyPairArg*)arg;
  44.     SSMStatus            rv;
  45.     keyPair = SSM_ZNEW(SSMKeyPair);
  46.     if (keyPair == NULL) {
  47.         goto loser;
  48.     }
  49.     rv = SSMKeyPair_Init(keyPair, connection, SSM_RESTYPE_KEY_PAIR,
  50.                          keyPairArg->keyGenContext);
  51.     if (rv != PR_SUCCESS) {
  52.         goto loser;
  53.     }
  54.     *res = SSMRESOURCE(keyPair);
  55.     return PR_SUCCESS;
  56.     
  57.  loser:
  58.     if (keyPair != NULL) {
  59. SSM_FreeResource (SSMRESOURCE(keyPair));
  60.     }
  61.     return PR_FAILURE;
  62. }
  63. SSMStatus
  64. SSMKeyPair_Init(SSMKeyPair       *inKeyPair, SSMControlConnection *connection,
  65.                 SSMResourceType   type, SSMKeyGenContext *keyGenContext)
  66. {
  67.     SSMStatus rv = PR_SUCCESS;
  68.     rv = SSMResource_Init(connection, &inKeyPair->super, type);
  69.     inKeyPair->m_KeyGenContext = keyGenContext;
  70.     inKeyPair->m_KeyGenType    = invalidKeyGen;
  71.     SSM_ClientGetResourceReference(SSMRESOURCE(inKeyPair), NULL);
  72.     return rv;
  73. }
  74. SSMStatus
  75. SSMKeyPair_Destroy(SSMResource *res, PRBool doFree)
  76. {
  77.     SSMKeyPair *keyPair = (SSMKeyPair*)res;
  78.     SSM_LockResource(SSMRESOURCE(keyPair));
  79.     if (keyPair->m_PubKey) {
  80.         SECKEY_DestroyPublicKey(keyPair->m_PubKey);
  81.     }
  82.     if (keyPair->m_PrivKey) {
  83.         SECKEY_DestroyPrivateKey(keyPair->m_PrivKey);
  84.     }
  85.     SSM_UnlockResource(SSMRESOURCE(keyPair));
  86.     SSMResource_Destroy(SSMRESOURCE(keyPair), PR_FALSE); 
  87.     if (doFree) {
  88.         PORT_Free(keyPair);
  89.     }
  90.     return PR_SUCCESS;
  91. }
  92. SSMStatus 
  93. SSMKeyPair_SetKeyGenType(SSMKeyPair    *inKeyPair,
  94.                          SSMKeyGenType  inKeyGenType)
  95. {
  96.   if (inKeyPair->m_KeyGenType != invalidKeyGen) {
  97.     return PR_FAILURE;
  98.   }
  99.   inKeyPair->m_KeyGenType = inKeyGenType;
  100.   return PR_SUCCESS;
  101. }
  102. SSMStatus 
  103. SSMKeyPair_SetAttr(SSMResource *res,
  104.                    SSMAttributeID attrID,
  105.                    SSMAttributeValue *value)
  106. {
  107.     SSMKeyPair *keyPair = (SSMKeyPair*)res;
  108.     SSMStatus    rv;
  109.     PR_ASSERT(SSM_IsAKindOf(res, SSM_RESTYPE_KEY_PAIR));
  110.     switch(attrID) {
  111.     case SSM_FID_KEYPAIR_KEY_GEN_TYPE:
  112.       SSM_DEBUG("Setting the key gen type to %d.n", value->u.numeric);
  113.       if (value->type != SSM_NUMERIC_ATTRIBUTE) {
  114.         rv = PR_FAILURE;
  115.         break;
  116.       }
  117.       rv = SSMKeyPair_SetKeyGenType(keyPair, (SSMKeyGenType)value->u.numeric);
  118.       break;
  119.     default:
  120.       SSM_DEBUG("Got unknown KeyPair Set Attr request %d.n", attrID);
  121.       rv = PR_FAILURE;
  122.       break;
  123.     }
  124.     return rv;
  125. }