]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_sd_cspdl/lib/SDFactory.cpp
Security-57336.1.9.tar.gz
[apple/security.git] / OSX / libsecurity_sd_cspdl / lib / SDFactory.cpp
1 /*
2 * Copyright (c) 2004,2011,2014 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25 //
26 // SDFactory -- The factory for Security Server context objects
27 //
28 #include "SDFactory.h"
29
30 #include "SDContext.h"
31
32
33 //
34 // SDFactory -- The factory for Security Server context objects
35 //
36 bool SDFactory::setup(SDCSPSession &session, CSPFullPluginSession::CSPContext * &cspCtx,
37 const Context &context, bool encoding)
38 {
39 if (cspCtx)
40 return false; // not ours or already set
41
42 switch (context.type())
43 {
44 case CSSM_ALGCLASS_SIGNATURE:
45 cspCtx = new SDSignatureContext(session);
46 return true;
47 case CSSM_ALGCLASS_MAC:
48 cspCtx = new SDMACContext(session);
49 return true;
50 case CSSM_ALGCLASS_DIGEST:
51 cspCtx = new SDDigestContext(session);
52 return true;
53 case CSSM_ALGCLASS_SYMMETRIC:
54 case CSSM_ALGCLASS_ASYMMETRIC:
55 cspCtx = new SDCryptContext(session); // @@@ Could also be wrap/unwrap
56 return true;
57 case CSSM_ALGCLASS_RANDOMGEN:
58 cspCtx = new SDRandomContext(session); // @@@ Should go.
59 return true;
60 }
61
62 return false;
63
64 #if 0
65 /* FIXME - qualify by ALGCLASS as well to avoid MAC */
66 switch (context.algorithm()) {
67 case CSSM_ALGID_MD5:
68 cspCtx = new MD5Context(session);
69 return true;
70 case CSSM_ALGID_SHA1:
71 cspCtx = new SHA1Context(session);
72 return true;
73 }
74 return false;
75
76 if (ctx)
77 CssmError::throwMe(CSSM_ERRCODE_INTERNAL_ERROR); // won't support re-definition
78 switch (context.algorithm()) {
79 case CSSM_ALGID_ROTTY_ROT_16:
80 ctx = new SDContext(16);
81 return true;
82 case CSSM_ALGID_ROTTY_ROT_37:
83 ctx = new SDContext(37);
84 return true;
85 }
86 #endif
87 return false;
88 }